composer config --list 显示的是运行时最终合并后的配置视图,优先级为:项目 composer.json → 全局 config.json → 环境变量,未设置项不显示,默认值和动态计算字段(如 github-protocols)也不体现。

composer config --list 是查看 Composer 当前配置快照最直接的方式,但它显示的不是“所有配置项”,而是当前作用域下 实际生效的配置值(含全局、本地、环境变量叠加结果),且默认不展开嵌套结构。想真正看清配置来源和层级,得配合参数和后续验证。
config --list 显示的是哪一层的配置?
它输出的是 Composer 运行时最终合并后的配置视图,优先级为:项目根目录 composer.json → COMPOSER_HOME/config.json(通常是 ~/.composer/config.json)→ 环境变量(如 COMPOSER_CACHE_DIR)。但注意:
- 未显式设置的字段(比如没在任何地方配过
process-timeout)不会出现在输出里,哪怕有默认值 - 数组类配置(如
repositories)只显示顶层键,不展开内容;"repositories": []可能掩盖了已配置但被覆盖/禁用的仓库 - 某些字段(如
github-protocols)仅在运行时动态计算,--list不会体现
如何让 --list 显示更完整的配置结构?
加 --format=json 并配合 jq 或文本搜索,能暴露更多细节:
composer config --list --format=json | jq '.config'
如果只想看某一项,比如确认 cache-dir 实际路径:
composer config cache-dir
这比从 JSON 里手动翻找更可靠。另外,加 --global 可单独查全局配置:
composer config --global --list
-
--list默认查当前项目(有composer.json时)或全局(无项目时) -
--global强制查全局配置,不受当前目录影响 -
--no-plugins可排除插件注入的配置干扰(有些插件会动态修改config)
为什么 config --list 显示的值和预期不符?
常见原因不是命令失效,而是配置被多层覆盖或环境变量劫持:
- 环境变量优先级高于
config.json:如果设置了COMPOSER_HOME=/tmp/composer,composer config home就会返回/tmp/composer,但--list输出里可能只写"home": "\/tmp\/composer",不易察觉 -
composer.json中的config字段若含null值(如"secure-http": null),会被解释为“禁用”,但--list可能直接省略该键 - PHP CLI 配置(如
memory_limit)不影响config输出,但会影响 Composer 加载配置的行为——比如内存不足时,--list可能卡住或报错,而非显示不全
真正容易被忽略的点是:Composer 的配置合并逻辑不透明,--list 是结果快照,不是溯源工具。要定位某项配置来自哪里,得用 composer config --list --verbose(部分版本支持)、查各配置文件原始内容,或临时清空环境变量再对比输出。










