要彻底还原 Composer 镜像源,必须删除项目 composer.json 和全局配置中的 repositories 字段(用 --unset),再运行 composer update --lock,并用 composer diagnose 验证 Repositories 是否显示 packagist.org。

还原 composer 镜像源时 composer config 不生效?
直接执行 composer config -g repo.packagist composer https://packagist.org 通常能恢复,但很多人发现没用——根本原因是私有镜像常通过 repositories 显式覆盖了 packagist.org,而 config -g repo.packagist 只修改全局镜像配置,不清理项目级自定义仓库。
真正要动的是 repositories 这个键,它优先级高于 repo.packagist,且可能存在于三个位置:
- 项目根目录的
composer.json(最常见) - 用户家目录的
~/.composer/config.json(全局配置) - 系统级配置(极少用,路径取决于安装方式)
删掉项目里硬编码的私有仓库 repositories
打开项目根目录下的 composer.json,找类似这样的块:
"repositories": [
{
"type": "composer",
"url": "https://your-private-mirror.com"
}
]
把它整个删掉。别只改 url,因为只要 repositories 数组存在,Composer 就会跳过默认的 packagist.org,哪怕数组为空也得清空或删掉该字段。
删完后运行:
composer update --lock
这步强制重读配置并更新锁文件,否则旧 composer.lock 仍指向私有源的包版本。
检查全局配置是否也被污染
执行 composer config -g repositories 查看全局是否也加了私有源。如果输出非空(比如显示一个对象或数组),说明全局也被改过。
清除方式分两种:
- 如果只是想清空整个
repositories字段:composer config -g --unset repositories - 如果只想删掉其中某一项(比如索引为 0 的私有源):
composer config -g --unset repositories.0
注意:--unset 是关键,config -g repositories [] 并不能清空,反而会写入空数组,照样触发覆盖逻辑。
composer diagnose 能帮你确认是否真还原成功
运行 composer diagnose,重点看两行输出:
-
Repo.packagist.org: 1 [HTTPS]—— 表示已连上官方源 -
Repositories: packagist.org [https://packagist.org]—— 表示当前生效的仓库确实是 packagist.org,没被其他repositories干扰
如果第二行显示的是你自己的域名,说明还有残留;如果第一行是 0 [HTTP] 或报 SSL 错误,可能是网络或证书问题,和镜像配置无关。
最隐蔽的坑是 CI/CD 环境里,构建脚本里硬写了 composer config repositories,本地改完也没用——得去 pipeline 配置里找。


















