composer config --list --global 仅显示用户手动设置的全局配置项,不包含默认值或环境变量覆盖项;要确认实际生效配置,需逐项查询具体值并检查来源。

composer config --list --global 只显示你亲手设过的项
它不是 Composer 的“所有配置说明书”,而是你执行过 composer config --global xxx yyy 的操作快照。没手动设过,哪怕有默认值(比如 sort-packages 默认为 true),也不会出现在输出里。
- 常见误判:看到输出里没有
cache-dir,就以为没配——其实可能根本没动过,默认路径照样生效 - 真正想确认是否被修改,直接查值更可靠:
composer config --global cache-dir,返回路径说明已显式设置;返回空或报错,说明沿用默认 - 全局配置文件位置取决于 Composer 版本:
~/.composer/config.json(v1)或~/.config/composer/config.json(v2+),--list --global读的就是这个文件的config段
想看镜像源?别只信 --list,要盯准 repositories 字段
composer config --list --global 输出的镜像配置可能藏在两个不同键下:repositories.packagist.org.url(v2 推荐)或旧式的 repositories.packagist.url。漏看一个,就可能误判源是否生效。
- 最稳做法:
composer config --global repositories.packagist.org.url和composer config --global repositories.packagist.url各跑一遍 - 如果都返回空,说明没设镜像;如果其中一条返回阿里云或腾讯云地址,那就是它在起作用
- 注意环境变量优先级更高:
COMPOSER_REPO_PACKAGIST可以绕过所有配置文件,直接覆盖镜像源,但--list完全不体现这点
cache-dir、github-oauth 这类高频项,别靠 grep 猜来源
composer config --list | grep github-oauth 能快速筛出认证配置,但看不出它是项目级、全局级,还是被 COMPOSER_AUTH 环境变量顶替了。
- 查具体值时加
--source参数:composer config --global --source github-oauth.github.com会告诉你值来自哪个文件(比如~/.config/composer/auth.json) - 对比项目与全局差异,不要合并看:
composer config --global cache-dir和composer config cache-dir分开执行,结果不同就说明本地覆盖了全局 -
--list输出里true可能是布尔值,也可能是字符串,没法区分;而composer config sort-packages返回的true是明确的布尔类型,更可信
需要结构化输出?--format=json + jq 比 --list 更靠谱
composer config --list --format=json 把整个生效配置树吐出来,适合脚本解析或快速定位嵌套字段,但它依然不包含默认值,也不反映环境变量注入逻辑。
- 查所有仓库定义:
composer config --list --format=json | jq '.config.repositories' - 过滤 GitHub 认证(比 grep 更准):
composer config --list --format=json | jq 'has("github-oauth")' - CI/CD 中验证缓存路径是否被正确注入,优先用
composer config cache-dir,而不是解析 JSON —— 简单场景没必要绕弯
--list 只回答后者。真要调试问题,得一层层查值、看来源、排除环境变量干扰,不能只盯着那一屏快照。











