composer config -l 显示当前项目生效的最终合并配置,优先读取项目 composer.json 并叠加全局配置,但不自动显示全局值;需 –global 查全局,且须在项目目录执行才有效。

composer config -l 能直接列出当前项目的 Composer 配置,但结果是否可信、是否包含全局设置、哪些值被覆盖——得看执行时的上下文。
执行 composer config -l 时默认查哪个配置文件
它优先读取当前目录下的 composer.json,再叠加项目级 composer.lock(不直接影响 config)、用户家目录的 auth.json(仅认证相关),最后才 fallback 到全局配置(~/.composer/config.json)。但注意:-l 不会自动合并全局值 —— 它只显示「当前项目生效的最终配置」,也就是已 merge 过的视图。
- 如果在项目根目录运行,看到的是
composer.json+ 全局配置合并后的结果 - 如果在非项目目录运行,
composer config -l会报错:Could not find composer.json - 想单独看全局配置?得加
--global:composer config -l --global
composer config -l 输出里哪些值是“假活跃”
有些字段看着有值,其实没生效。比如 process-timeout 在 Composer 2.2+ 已被弃用,但 -l 仍可能显示旧值;又比如 fxp-asset-plugin 相关配置,在移除插件后不会自动清理,但实际已无效。
- 重点关注带
(set)标记的行 —— 表示该值明确被设过(来自 json 或命令) - 没有
(set)的,可能是默认值,也可能是被其他配置覆盖后 fallback 的 -
github-oauth这类敏感字段,默认不显示明文,只显示***
为什么 composer config -l 看不到刚用 composer config 设的值
常见原因是作用域错配。比如你在项目目录下执行了 composer config github-oauth.github.com xxx,这会写入项目级 composer.json;但如果你紧接着在父目录执行 composer config -l,就根本不在项目上下文中,自然看不到。
- 改配置后,立刻在**同一目录**下运行
composer config -l才能验证 - 用
--global设置的,必须用composer config -l --global查 - 修改
composer.json后未执行composer update?不影响 config 查看,但某些配置(如repositories)需 update 才真正参与依赖解析
真正容易漏掉的是配置层级叠加逻辑:项目配置可以覆盖全局,但某些字段(如 cafile)只认全局或环境变量,composer config -l 显示的“最终值”未必是你以为的那个“最终”。