composer config --list 默认只显示当前项目生效的显式配置,不单独列出未被覆盖的全局配置项;需加 --global 参数才能查看全局配置,且不显示默认值、环境变量来源及插件注入项。

直接运行 composer config --list 看不到全局配置?
默认情况下,composer config --list 只显示当前项目生效的配置(即项目 composer.json 中的 config 字段 + 全局配置中被继承下来的项),但不会单独列出全局配置里显式设置、却未被项目覆盖的项。比如你在 ~/.composer/config.json 里设置了 cache-dir,但项目没动它,--list 仍会显示这个值——但它不标注来源,容易误以为是项目配的。
- 想确认是否真有全局配置:必须加
--global参数,运行composer config --global --list - 如果当前目录没有
composer.json,composer config --list会直接报错:Could not find composer.json,不是静默返回空 -
--list只列「显式设置」的项,sort-packages这类默认为true的配置,哪怕没写进任何文件,也不会出现在输出里
查镜像源、缓存路径等关键配置,别只依赖 --list
像 repositories、cache-dir 这种高频排查项,--list 输出的是扁平化点号路径(如 repositories.packagist.org.url),嵌套深、易漏看,且不带类型提示(true 可能是布尔值,也可能是字符串)。
- 更可靠的做法是直查键名:
composer config repositories或composer config cache-dir,输出简洁明确 - 查镜像源时注意字段名差异:
repositories.packagist.org(v2+ 推荐)和旧版的repositories.packagist都可能出现,建议两个都试 - 环境变量优先级高于所有配置文件,如果设置了
COMPOSER_CACHE_DIR,composer config cache-dir返回的就是环境变量值,但--list输出里可能只写成"cache-dir": "\/tmp\/c",看不出来源
--list 的 JSON 输出和过滤技巧
composer config --list --format=json 能把整个配置结构吐出来,适合脚本解析或快速定位嵌套字段,但要注意它依然不包含默认值,也不反映环境变量注入逻辑。
- 配合
jq查仓库列表:composer config --list --format=json | jq '.config.repositories' - 用
grep快速筛关键词(比如找 GitHub 认证):composer config --list | grep github-oauth - 想对比项目与全局差异?别合并看:
composer config --global --list | grep -E '^(cache-dir|repositories)' && composer config --list | grep -E '^(cache-dir|repositories)'
哪些配置 --list 根本不会显示?
这不是 bug,是设计使然:--list 展示的是“当前生效的显式配置快照”,不是 Composer 的完整能力清单。很多你认为“应该有”的配置项,其实压根不在这个视图里。
-
cafile、http-basic、platform这些键,只要没手动设过,就不会出现在--list输出中,哪怕它们语法合法、文档有载 - 动态计算字段如
github-protocols、process-timeout(未显式配置时走默认值)均不体现 - 插件注入的配置默认也会混进来,如需排除干扰,加
--no-plugins参数
真正要确认某配置是否起效,最稳妥的方式永远是:查具体键值 + 结合实际行为验证(比如换镜像后执行 composer show packagist/packagist 看请求地址),而不是盯着 --list 的输出反复猜。










