composer config --list 显示所有生效配置项,标有 (env) 的由环境变量驱动;关键变量如 COMPOSER_HOME、COMPOSER_CACHE_DIR 可用 echo 直接查看,但注意其优先级低于配置文件且部分变量(如 COMPOSER_VENDOR_DIR)仅在初始化时生效。

composer config --list 显示所有配置项(含环境变量影响)
Composer 本身不提供直接打印“环境变量”的命令,但它的配置系统会自动合并环境变量(如 COMPOSER_HOME、COMPOSER_CACHE_DIR)和全局/本地配置。运行 composer config --list 是最接近需求的操作——它输出当前生效的全部配置,其中标有 (env) 的条目即由环境变量驱动。
注意:该命令不会列出未被 Composer 读取的环境变量(比如 PATH),只展示 Composer 实际使用的那几个。
-
COMPOSER_HOME控制配置和全局包存放路径,默认为$HOME/.composer(Linux/macOS)或%USERPROFILE%\AppData\Roaming\Composer(Windows) -
COMPOSER_CACHE_DIR覆盖默认缓存位置,优先级高于COMPOSER_HOME中的cache-dir配置 -
COMPOSER_NO_INTERACTION、COMPOSER_DISABLE_TTY等布尔型变量会影响交互行为,但不会出现在--list输出中
手动检查关键 Composer 环境变量值
终端里直接用 echo 查看最常用的几个变量,比依赖 config --list 更直观,尤其当变量被设置但未生效时(比如拼写错误或 shell 未重载)。
- Linux/macOS:
echo $COMPOSER_HOME、echo $COMPOSER_CACHE_DIR、echo $COMPOSER_VENDOR_DIR - Windows(cmd):
echo %COMPOSER_HOME%、echo %COMPOSER_CACHE_DIR% - Windows(PowerShell):
echo $env:COMPOSER_HOME、echo $env:COMPOSER_CACHE_DIR
如果输出为空,不代表变量不存在——可能是未设置,也可能是 Composer 正在使用默认路径。此时可配合 composer config --global home 和 composer config --global cache-dir 确认实际落盘位置。
COMPOSER_HOME 被修改后 composer global 命令仍写入旧路径?
这是高频踩坑点:改了 COMPOSER_HOME 环境变量,但 composer global install 还是装到老地方。根本原因是 Composer 在首次运行时会生成一个 auth.json 或 config.json,之后优先读取该文件中的 home 字段,而非实时读环境变量。
- 运行
composer config --global --editor打开全局配置文件,检查是否存在硬编码的"home"字段 - 若存在,删掉该行或设为
null,让 Composer 回退到环境变量逻辑 - 也可用
composer config --global home ""清空配置项(注意引号间留空) - 修改后执行
composer global info验证路径是否已更新
为什么 vendor 目录位置不受 COMPOSER_VENDOR_DIR 影响?
COMPOSER_VENDOR_DIR 只在项目初始化(composer install 或 create-project)阶段起作用;一旦 composer.lock 或 vendor/ 存在,后续操作完全忽略该变量。它不是运行时切换 vendor 位置的开关。
- 想临时换 vendor 路径?必须先删掉现有
vendor/和composer.lock,再设好COMPOSER_VENDOR_DIR后运行composer install - 长期项目建议用
composer config vendor-dir写入composer.json,比环境变量更稳定 -
COMPOSER_VENDOR_DIR对composer global无效——全局 vendor 永远固定在$COMPOSER_HOME/vendor
环境变量只是 Composer 配置链中的一环,优先级低于 composer.json 和 config.json,高于默认值。真正要调试路径问题,得把 config --list、echo $VAR、cat $COMPOSER_HOME/config.json 三者结果对照着看。











