composer config -l 显示当前项目最终生效的合并配置值,包括项目 composer.json、全局配置和环境变量叠加结果,不标注来源;加 --global 仅显示全局配置,敏感字段默认隐藏。

composer config -l 显示的是什么
它输出当前上下文(项目级或全局)最终生效的配置值,不是原始 composer.json 或 auth.json 内容。所有来源——项目配置、全局 ~/.composer/config.json、环境变量(如 COMPOSER_HOME)——都会被合并,只留一个结果。
常见误解是以为它能告诉你“这个值从哪来”,但它不标注来源;带 (global) 标记的项才说明来自全局配置。想确认某项是否被环境变量覆盖?得手动查 env | grep COMPOSER。
- 不加参数默认查项目级配置(即当前目录下
composer.json+ 全局配置叠加) - 加
--global(或简写-g)才只读~/.composer/config.json,不含项目配置 - 敏感字段如
github-oauth或 token 默认被隐藏,需加--show-passwords才显示 - 输出里像
home、bin-dir这类路径,是 Composer 自动推导的,未必在任何配置文件中显式声明过
如何快速定位某个配置项
别一行行翻,用管道过滤最直接。比如查镜像源是否生效,就盯住 repo.packagist:
composer config -l | grep repo\.packagist
如果返回空,说明没设;如果返回 repo.packagist {"type":"composer","url":"https://mirrors.aliyun.com/composer/"},那基本没问题。注意反斜杠转义,否则 grep repositories 会把 repositories 和 repo.packagist 都匹配出来。
- 想查所有和缓存有关的:
composer config -l | grep cache - 查 HTTP 相关设置(如代理):
composer config -l | grep -E "(http|proxy|ssl)" - Windows PowerShell 用户注意引号:
composer config -g "repo.packagist",否则 URL 可能被截断
为什么 composer config -l 看不到某些你改过的配置
因为配置键名写错了,或者层级不对。Composer 对 key 名非常敏感,比如:
-
repo.packagist是对的;repositories.packagist、repos.packagist.org都无效,Composer 2.2+ 会静默忽略 - 在
composer.json里写"autoload"没问题,但要是误写成"autoloader",composer dump-autoload -v输出里就不会出现 PSR-4 mapping 条目 - 全局配置写进了
auth.json?没用。auth.json只管认证凭据,不参与config -l的合并逻辑 - 用了插件(比如
hirak/prestissimo)?它的配置不在标准路径,config -l不会显示
配置查完下一步该做什么
看到值 ≠ 它真在起作用。尤其镜像类配置,必须验证真实请求地址:
composer clear-cache && composer require monolog/monolog -vvv 2>&1 | grep "GET https"
只看这一行输出:GET https://mirrors.aliyun.com/composer/packages.json 才算落地;GET https://repo.packagist.org/... 就说明配置没生效,哪怕 composer config -g repo.packagist 显示得再漂亮也没用。
容易被忽略的是环境变量优先级——COMPOSER_REPO_PACKAGIST 会直接覆盖 repo.packagist 设置,且 config -l 完全不体现这点。











