答案是字段名错误:Composer 2.x 实际读取 repos.packagist(复数带s),而镜像配置用的是 repo.packagist(单数),二者互不干扰;删错字段无效,且必须配合 clear-cache 才能生效。

composer config -g --unset repos.packagist 为什么没用?
因为字段名写错了。Composer 2.x 实际读取的是 repos.packagist(复数、带 s),但你设镜像时用的是 repo.packagist(单数)。这两个键互不干扰,删错一个,另一个还在生效。
常见误操作包括:
- 执行
composer config -g --unset repo.packagist→ 白删,repos.packagist仍存在 - 漏掉
-g→ 只删当前项目配置,全局不受影响 - 执行后没清缓存 → Composer 仍从旧缓存拉包,行为不变
验证是否删干净:运行 composer config -g repos.packagist,应输出 Key "repos.packagist" does not exist 或直接为空。
怎么真正切回 packagist.org 官方源?
最稳妥的方式不是“删除”,而是“覆盖”——直接把地址设成官方源,绕过所有 fallback 逻辑:
- 全局生效:
composer config -g repo.packagist composer https://packagist.org - 仅当前项目:
composer config repo.packagist composer https://packagist.org(不加-g)
注意三点:
- 必须带
composer类型前缀,写成https://packagist.org或https://repo.packagist.org都不识别 - URL 末尾不能加
/,否则会拼出错误路径导致 404 - 执行后务必跟
composer clear-cache,否则缓存仍指向旧镜像
为什么删了全局配置,install 还走阿里云?
因为 Composer 查源顺序是:环境变量 > 项目级 composer.json 中的 repositories > 全局配置。哪怕你全局删得干干净净,只要项目里有残留,它就优先生效。
排查步骤:
- 查项目级配置:
grep -A5 '"repositories"' composer.json - 查环境变量:
env | grep COMPOSER_REPO_PACKAGIST(Linux/macOS)或echo %COMPOSER_REPO_PACKAGIST%(Windows) - 临时绕过项目配置:
composer config --unset repositories(在项目目录下运行)
特别注意:有些老项目 composer.json 里写了 "packagist.org": false,等于关掉了默认源又没给替代源,这种必须手动编辑 JSON 恢复,删全局配置毫无作用。
验证是否真还原成功,别只看 config 输出
composer config -g repo.packagist 显示空或报错,不代表请求已走官方源。关键要看实际网络行为:
- 运行
composer require monolog/monolog --no-install -vvv - 滚动日志中找
Downloading https://开头的行 - 正确应为
https://repo.packagist.org/packages.json,而不是任何mirrors.xxx.com
如果仍见镜像域名,说明某一层配置或缓存仍有残留。国内镜像每年关停频繁(腾讯云已于 2024 年 10 月 1 日下线),靠记忆地址不如掌握「覆盖 + 清缓存 + 看请求 URL」这一闭环验证法。


















