composer config --list 显示的配置合并自命令行参数、项目 composer.json 的 config 字段、用户级 auth.json 和 config.json、全局默认值,优先级从高到低,后加载覆盖前一个。

composer config --list 显示的配置从哪来
它合并了四个层级的配置:命令行参数、当前项目 composer.json 中的 config 字段、用户级 auth.json 和 config.json(通常在 ~/.composer/ 或 %APPDATA%\Composer\),以及全局默认值。优先级从高到低,后加载的会覆盖前一个。
常见错误现象:composer config --list 看到某个值,但在项目里执行 install 却没生效——大概率是该配置被更高优先级的来源覆盖了,比如项目 composer.json 里写了同名键但值不同。
- 用
composer config --global --list单独看全局配置 - 用
composer config --list --no-plugins排除插件动态修改的干扰 - 某些配置(如
process-timeout)只在运行时起作用,--list显示的是设定值,不代表当前进程已应用
为什么有些配置项在 --list 里不显示
不是所有配置都有默认值或显式设置;--list 只显示「已被设置」的项(包括设为 null 或空字符串),未设置的不会出现。比如 github-protocols 默认是 ["https"],但如果不曾手动配过,它就不会列出来。
使用场景:排查为什么某功能(如私有 GitLab 包拉取失败)没按预期走 SSH 而是走 HTTPS——这时要主动查 composer config github-protocols,而不是只依赖 --list 输出。
-
composer config github-protocols查单项,即使没设过也会返回默认行为提示 -
composer config --list | grep -i protocol在终端快速过滤(Linux/macOS) - Windows 用户可用
composer config --list | findstr /i "protocol"
修改配置后 composer install 没反应?检查这些地方
改完配置不等于自动重生效。尤其涉及网络、缓存、路径类配置(如 cache-dir、fxp-asset 相关项),需要确认是否影响了后续命令的实际行为路径。
性能 / 兼容性影响:比如把 cache-dir 改到 NFS 挂载盘,可能让 install 变慢甚至卡住;设 secure-http 为 false 会让非 HTTPS 的包源被允许,但 Composer 2.2+ 已默认禁用,强行开启可能触发警告甚至拒绝操作。
- 改完
cache-dir后,旧缓存不会自动迁移,建议手动清空原目录再试 -
composer clear-cache不会重读配置,它只是删缓存,配置是否生效得靠下一次install或update - 如果用了
COMPOSER_HOME环境变量,它会覆盖默认的全局配置位置,--list结果里home字段会反映这个值
想导出当前完整配置用于备份或对比
composer config --list 输出是扁平化的键值对,没法直接还原成 JSON 结构;真正可复用的配置源只有两个:项目根目录的 composer.json 和用户主目录下的 config.json。
容易踩的坑:有人把 --list 输出复制粘贴进新项目当配置用,结果发现格式不对、嵌套丢失、布尔值写成字符串——这根本不是合法配置源。
- 导出项目级配置:直接看
composer.json里的config对象 - 导出全局配置:查
composer config --global --list,再用composer config --global --dump(Composer 2.5+)生成结构化 JSON - 对比两次配置差异:用
composer config --list > before.txt和composer config --list > after.txt,再用diff before.txt after.txt










