Composer镜像未生效的主因是配置键名错误或packagist.org未显式禁用:新版需用repos.packagist(复数),且必须在repositories数组中单独添加{"packagist.org": false},否则仍会静默回退至官方源。

确认当前镜像源是否真在生效
很多人以为改了镜像就自动切换,其实 composer config -g repo.packagist 输出为空、或显示 {"type":"composer","url":"https://packagist.phpcomposer.com/"} 这类已停用地址,说明配置根本没生效。新版 Composer(≥2.2)必须用复数键名 repos.packagist,写成单数 repo.packagist 会被静默忽略。
关闭 packagist.org 的正确写法
即使你配了私有源或国内镜像,只要 packagist.org 没显式禁用,Composer 就永远优先查它——哪怕你把自定义源放在 repositories 数组最前面也无效。
-
{"packagist.org": false}必须是repositories数组里的一个独立对象 - 它必须放在数组末尾,不能嵌套在其他仓库配置里
- 写成
"packagist": false或"packagist.com": false全部无效 - 项目级
composer.json中的repositories会完全屏蔽全局镜像,此时要检查composer config repo.packagist(不加-g)
临时禁用错误镜像的命令行操作
别改配置文件,用命令快速验证:
- 切回官方源:
composer config -g repos.packagist composer https://packagist.org - 清缓存强制重载元数据:
composer clear-cache - 删掉旧缓存快照(关键):
rm -rf ~/.composer/cache/repo/https---mirrors-aliyun-com-composer(路径按你实际镜像替换) - 再跑
composer require vendor/name -vvv,看日志里是Downloading https://packagist.org/还是继续走错源
CI 或多人协作中容易被忽略的点
全局配置 composer config --global repos.packagist 一旦设错,所有项目都会受影响;而项目级 composer.json 里的 repositories 又可能漏掉 {"packagist.org": false} 导致静默 fallback 到官方源——结果就是:你以为在用私有源,其实包全从 packagist.org 走,但那个包压根不在那里。


















