composer config --list 默认只显示全局生效且非空的配置项,不显示被覆盖、继承或重置的值;需用 --global、--file 或 -v 参数分别查看全局配置、项目配置块及配置来源。

composer config --list 是查看当前 Composer 配置的最直接方式,但它默认只显示「全局生效」且「非空」的配置项——很多你设过但被覆盖、继承或重置的值根本不会出现。
为什么 composer config --list 看不到刚设置的配置?
Composer 配置分三层:系统级(/etc/composer/config.json)、用户级(~/.composer/config.json)、项目级(./composer.json 中的 config 字段)。composer config --list 只合并并输出最终生效值,不告诉你来源;如果某配置在项目级被设为 null 或空字符串,它会被上层值覆盖,但该覆盖值若未显式设置,也不会出现在列表中。
- 执行
composer config --list --global查看全局配置(含未被覆盖的默认值) - 执行
composer config --list --file composer.json查看当前项目composer.json中声明的config块(即使值为空) - 用
composer config --list -v可看到每项配置的来源路径(如global、project),这是定位冲突的关键
composer config 的常见误用场景
很多人以为 composer config repo.packagist false 就能禁用 Packagist,其实这只会禁用默认仓库别名,真正生效的是 composer config repositories.packagist false —— 注意 repositories 是复数,且 packagist 是子键名。
- 设代理:
composer config --global http-proxy http://127.0.0.1:8080,但若公司网络走 HTTPS 代理,得用https-proxy键,二者不互通 - 改镜像源:
composer config --global repo.packagist composer https://mirrors.aliyun.com/composer/,注意末尾斜杠不能少,否则部分版本会解析失败 - 删配置别名:
composer config --unset repos.myrepo,但--unset不支持通配符,也不能回退到上层值,只能清空当前层级
如何确认某配置是否真正生效?
光看 --list 输出不够,得结合实际命令行为验证。比如设了 process-timeout,就运行 composer install -vvv 观察日志里是否出现 Process timeout set to 300;设了 fxp-asset-plugin 相关配置,得看 composer diagnose 是否报 fxp-asset-plugin is not installed。
- 临时覆盖配置:用
-d指定自定义composer.json路径,或COMPOSER=xxx.json composer install,绕过默认查找逻辑 - 检查加载顺序:运行
composer config --list -v时留意每行末尾的(global)/(project)标记,冲突时项目级优先于全局级 - 某些配置(如
archive-format)仅在composer archive时起作用,平时install或update完全不读取
配置不是写完就完事,Composer 的合并逻辑和层级覆盖容易让人误判生效状态。最稳妥的方式是:设完立刻用 --list -v 看来源,再用对应命令加 -vvv 观察实际行为——尤其是涉及网络、超时、路径等影响执行流程的配置。










