composer config --list 不显示仓库配置,因 repositories 是独立键、非 config 子项;查仓库须用 composer config repositories 或 composer show -p 查最终生效列表。

composer config --list 显示的仓库配置不全?
默认执行 composer config --list 只显示全局和当前项目 config 段的值,**不会列出已启用的仓库(repositories)**——因为仓库是独立配置项,被归类在 repositories 键下,而 --list 默认只展开一级键名,且会跳过数组型配置(如 repositories、scripts)。
常见错误现象:运行后没看到 packagist.org 或自定义镜像地址,误以为配置失效。
- 用
composer config --list查仓库本质是“查错方向” - 真正要查仓库,得显式指定路径:
composer config repositories - 若提示
Key "repositories" does not exist,说明当前配置里压根没定义该键(Composer 会自动 fallback 到默认 Packagist)
如何完整列出所有生效的仓库(含隐式默认)?
Composer 的仓库列表是“合并结果”:项目级 composer.json 中的 repositories + 全局 config.json 中的 repositories + 内置默认(packagist.org),但默认仓库仅在没有任何自定义 repositories 时才启用(即“禁用 Packagist”需显式设置 "packagist.org": false)。
实操建议:
- 查项目级仓库:
composer config repositories - 查全局仓库:
composer config -g repositories - 确认是否禁用了默认源:
composer config repos.packagist.org(返回false表示已禁用) - 想看最终实际生效的完整列表(含 fallback 行为):用
composer show -p,它会打印解析后的仓库顺序(带[repo]标记)
为什么加了仓库却没生效?典型配置陷阱
仓库配置写错位置或格式,会导致完全被忽略——Composer 不报错,但请求仍走默认源。
- 把
repositories写在config段里(错误):{ "config": { "repositories": [{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}] } } - 正确位置是根级(同
require平级):{ "repositories": [{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}], "require": { ... } } - 类型写成
packagist(已废弃),应为composer - URL 少了协议(如
mirrors.aliyun.com/composer/)或末尾多余斜杠(部分镜像站会 404)
调试时优先用 show -p 而非 config
composer show -p 是唯一能反映“真实请求链路”的命令:它会解析所有配置、合并层级、应用禁用规则,并按最终优先级顺序列出每个仓库及其 URL。比手动拼接 config 输出更可靠。
注意点:
- 输出中带
[repo]的行才是有效仓库;[repo] packagist表示启用了默认源 - 如果看到多个同名仓库(如两个
packagist),说明配置有冗余或冲突 - 首次运行可能触发 autoload 重建,稍慢属正常
仓库顺序决定包查找优先级,靠前的匹配失败才会往下找——这点容易被忽略,但直接影响私有包能否被正确安装。











