Composer 2.x 全局镜像配置实际读取的是 repo.packagist(单数),而非 repos.packagist(复数);删错字段无效,且项目级 repositories 或环境变量优先级更高,会完全屏蔽全局设置,清缓存前须先确认二者为空。

直接删掉 repos.packagist 字段 + 清缓存,不等于还原成功——大概率还走镜像,因为项目级或环境变量配置优先级更高。
为什么 composer config -g --unset repos.packagist 总没用?
不是命令失效,是字段名写错了。Composer 2.x 实际读取的是 repo.packagist(单数),而很多人设镜像时用的是 repos.packagist(复数)。这两个字段完全独立,删错一个,另一个还在生效。
- 执行
composer config -g --unset repo.packagist→ 正确删掉全局镜像设置 - 执行
composer config -g --unset repos.packagist→ 白删,repo.packagist还在 - 漏掉
-g→ 只删当前项目composer.json里的repositories,不影响全局 - 验证是否删干净:运行
composer config -g repo.packagist,应输出Key "repo.packagist" does not exist
怎么确认当前真正生效的源?
Composer 查源顺序是:环境变量 > 项目级 composer.json > 全局配置。只看 composer config -g 输出会误判。
- 查项目级:运行
composer config repo.packagist(不加-g),输出地址即当前实际用的源 - 查环境变量:
env | grep COMPOSER_REPO_PACKAGIST(Linux/macOS)或echo %COMPOSER_REPO_PACKAGIST%(Windows) - 查项目配置:打开
composer.json,搜索"repositories"—— 如果存在且含"packagist.org": false或自定义 URL,它就完全屏蔽全局设置
切回官方源最稳的操作是覆盖,不是删除
直接把地址改回官方源,比删字段更可靠,尤其兼容旧版 Composer(如 2.2–2.4)可能因删配置引发解析异常。
- 全局切回:
composer config -g repo.packagist composer https://packagist.org - 仅当前项目临时切回:
composer config repo.packagist composer https://packagist.org(不加-g) - 华为云/腾讯云用户注意路径格式:华为云必须是
https://repo.huaweicloud.com/repository/php/(末尾/repository/php/,不是/composer/) - 改完必须立刻执行
composer clear-cache,否则仍用旧缓存的packages.json快照
验证是否真走官方源
别信配置输出,要看真实网络请求。
- 运行
composer require monolog/monolog --no-install -vvv - 滚动日志里找
Downloading https://开头的行 - 正确应为
https://repo.packagist.org/packages.json或类似https://packagist.org/域名 - 若仍见
mirrors.aliyun.com、repo.huaweicloud.com等,说明某层配置或缓存还有残留
最容易被忽略的是项目级 repositories 配置和环境变量——它们会彻底绕过全局设置,且不会在 composer config -g 中体现。清缓存前先确认这俩地方空了,否则一切操作都是白忙。


















