验证 Composer 全局镜像是否生效需三步:一查 composer config -g repo.packagist 输出是否为有效 JSON 对象;二查项目 composer.json 中 repositories 字段是否存在(含空数组),存在则全局镜像被忽略;三用 curl -I 检查镜像 URL 是否返回 200 状态码。

检查 composer config -g repo.packagist 输出是否为有效 JSON
运行 composer config -g repo.packagist 是验证全局镜像是否生效的最直接方式。它必须输出一个完整的 JSON 对象,例如:{"type":"composer","url":"https://mirrors.aliyun.com/composer/"}。如果输出为空、报错、或只显示 https://packagist.org(没包在对象里),说明配置根本没写进去,或者被覆盖了。
确认项目级 repositories 是否静默禁用全局镜像
只要项目根目录的 composer.json 里存在 "repositories" 字段(哪怕值是空数组 []),Composer 就会完全忽略全局镜像配置,转而只用项目级配置。执行 composer config --list | grep repositories,若输出非空,就说明项目级配置已接管。
- 临时绕过:删掉项目
composer.json中的"repositories"字段,再试 - 长期方案:把私有源和
{"packagist.org": false}显式写进项目级repositories数组,并确保顺序正确
验证镜像 URL 是否可访问且未停用
国内部分旧镜像已下线(如 https://packagist.phpcomposer.com),但配置残留仍会导致 404。用 curl -I https://mirrors.aliyun.com/composer/ 检查 HTTP 状态码是否为 200;若返回 404 或超时,说明镜像地址失效或网络不通。
- 阿里云当前可用地址:
https://mirrors.aliyun.com/composer/ - 腾讯云当前可用地址:
https://mirrors.cloud.tencent.com/composer/ - 切回官方源临时验证:
composer config -g repo.packagist composer https://packagist.org
注意 repositories 配置中 packagist.org 的写法陷阱
{"packagist.org": false} 必须是 repositories 数组里的一个独立对象,不能嵌套、不能合并、不能漏掉花括号。写成 "packagist.org": false(没包在对象里)或 {"type":"composer","url":"...","packagist.org":false}(混在一个仓库对象里)都会被 Composer 忽略。
- 正确示例(放在私有源之后、数组末尾):
[{"type":"vcs","url":"https://gitlab.example.com/mylib.git"},{"packagist.org": false}] - 错误示例:
"repositories": {"packagist.org": false}—— 不是数组,不生效
repositories 字段、{"packagist.org": false} 写错位置、或镜像 URL 本身已不可用。每次改完配置,务必用 composer config -g repo.packagist 和 composer config --list 双重确认,而不是直接跑 require。


















