Composer 2.2+ 镜像不生效主因是键名错误:必须用 repositories.packagist.org(非 repo.packagist 或 repos.packagist),且需同时配置 .type composer 和 .url(末尾带 /);项目级 repositories 字段会完全覆盖全局配置,需用 composer config --unset repositories 清除并删 composer.lock、vendor/ 后重试。

为什么composer config -g repo.packagist没反应
命令执行成功但镜像不生效,大概率是键名写错了。Composer 2.2+ 已弃用 repo.packagist,必须用 repositories.packagist.org;而旧版教程里写的 repos.packagist(多一个 s)或 repo.packagist.org(拼错)也完全无效,且不报错,只默默忽略。
正确写法是两条命令缺一不可:
composer config -g repositories.packagist.org.type composercomposer config -g repositories.packagist.org.url https://mirrors.aliyun.com/composer/
漏掉 .type 行,或 URL 少了结尾斜杠 /,都会导致请求发到错误路径(比如 /p2/ 子目录),最终返回 404 或 SSL 错误。
项目级repositories覆盖全局配置
只要项目根目录的 composer.json 里有 "repositories" 字段,无论内容是空对象、{"packagist.org": false} 还是配了私有源,全局镜像就彻底失效——这是 Composer 的设计优先级,不是 bug。
排查方式很简单:
- 运行
grep -A5 '"repositories"' composer.json看是否被定义 - 临时清空:执行
composer config --unset repositories(注意没-g) - 确认清除后,再跑
composer config -g repositories.packagist.org.url查看是否生效
别忘了删掉 composer.lock 和 vendor/,否则旧 lock 文件会继续走原始源地址。
curl -I验证镜像服务连通性比composer diagnose更准
composer diagnose 只检查配置格式和缓存路径,不发真实请求;真正卡住的往往是 DNS、TLS 或镜像服务本身问题。
直接测源站响应:
-
curl -I https://mirrors.aliyun.com/composer/packages.json—— 应返回HTTP/2 200 -
curl -kI https://mirrors.aliyun.com/composer/packages.json—— 若报 SSL 错误,说明证书链异常(常见于企业网络拦截) -
ping mirrors.aliyun.com或nslookup mirrors.aliyun.com—— 排查 DNS 解析失败
如果 curl 都超时或 404,换源或换网络环境比调 Composer 配置更有效。
Windows 下COMPOSER_HOME路径容易写错位置
Git Bash 默认读 %APPDATA%\Composer\config.json,而不是 Linux 风格的 ~/.composer/config.json;用 composer config -g 却在 PowerShell 里执行,可能写到了另一个用户的家目录下。
安全做法是显式指定路径:
- 查当前生效路径:
echo $COMPOSER_HOME(Git Bash)或echo %COMPOSER_HOME%(CMD) - 强制写入:
composer config --global repositories.packagist.org.url https://mirrors.aliyun.com/composer/(加--global比-g更明确) - 手动编辑前先备份:
cp %APPDATA%\Composer\config.json config.json.bak
配置文件里多一个逗号、少一个引号,整个 composer 命令就会报 file_get_contents(): Failed to open stream,连错误行都提示不出来。











