composer config --list 默认只显示当前项目配置,不包含全局配置;需加 -g 参数才显示全局配置,且仅列出显式设置的项,不显示默认值。

composer config --list 显示的是全局还是当前项目配置?
默认只显示当前项目的 composer.json 中的配置项,不包含全局配置(如 ~/.composer/config.json)。若要同时查看全局配置,必须显式加上 -g 或 --global 参数。
- 仅当前项目:
composer config --list - 仅全局配置:
composer config --list -g - 两者合并查看:
composer config --list -g && composer config --list
注意:如果当前目录下没有 composer.json,composer config --list 会报错 Could not find package.json in current directory(实际错误信息是 Could not find composer.json),不是静默返回空。
为什么有些配置项没出现在 --list 输出里?
composer config --list 只列出「已显式设置」的配置项,不会显示默认值。例如 process-timeout 默认是 600,但你没在 composer.json 或全局配置中改过它,就不会出现在列表中。
- 常见被误以为“缺失”的配置:
fxp-asset-proxy、github-oauth、notify-on-install - 它们属于「运行时行为配置」,只有被手动写入配置文件后才会显示
- 想确认某配置是否生效,更可靠的方式是直接查值:
composer config github-oauth.github.com
如何用 --list 快速定位某个配置是否被覆盖?
当项目配置和全局配置冲突时(比如都设置了 cache-dir),--list 本身不标明来源,需配合 -g 分开查。关键技巧是使用 composer config --list | grep xxx 快速过滤,再比对两次输出。
composer config cache-dir composer config -g cache-dir
上面两条命令分别输出当前项目和全局的 cache-dir 值,比看 --list 更直接。尤其适合 CI/CD 环境中验证缓存路径是否被正确注入。
config --list 的输出格式和可读性问题
输出是纯文本键值对,缩进不统一,嵌套结构(如 repositories)会被扁平化为点号路径(如 repositories.packagist.org.type),容易误读。
- 不要依赖肉眼识别层级,用
composer config repositories查整个数组更清晰 - 含特殊字符的 key(如带点或斜杠的 repo 名)可能被转义,导致
--list输出与原始 JSON 不一致 - 输出不含类型信息(字符串/布尔/数组),遇到
true或null需结合上下文判断
真正需要结构化查看时,不如直接 cat composer.json | jq '.'(需装 jq)或打开文件人工核对——--list 是快速扫描工具,不是配置审查工具。










