实际生效的镜像源优先级为:环境变量 > 项目级 composer.json > 全局配置;需依次检查 composer_repo_packagist 环境变量、项目级 repo.packagist、全局 repos.packagist(非 repo.packagist),并清除缓存验证。

确认当前实际生效的镜像源在哪一层
Composer 查源顺序是:环境变量 > 项目级 composer.json > 全局配置(~/.composer/config.json 或 %APPDATA%\Composer\config.json)。只看 composer config -g repo.packagist 输出会误判——它可能被上层覆盖。
必须分三步查:
- 查环境变量:
env | grep COMPOSER_REPO_PACKAGIST(Linux/macOS)或echo %COMPOSER_REPO_PACKAGIST%(Windows),有输出就说明它在最优先级强制指定源 - 查项目级:
composer config repo.packagist(不加-g),输出非空即表示当前项目自己写了镜像 - 查全局:
composer config -g repos.packagist(注意是复数repos),不是repo——这是 Composer 2.x 实际读取的字段名
删错字段等于没删:必须用 repos.packagist(复数)
很多用户执行 composer config -g --unset repo.packagist 后发现没生效,是因为 Composer 2.x 只认 repos.packagist(带 s)。这两个字段互不干扰,删错一个,另一个照常生效。
正确操作是:
- 先删全局复数字段:
composer config -g --unset repos.packagist - 再检查是否还有旧写法残留:
composer config -g --unset repo.packagist(部分老教程/脚手架用过单数) - 如果提示
Key "repos.packagist" does not exist,说明已删干净;否则重复执行
项目级配置会屏蔽全局设置
即使全局删干净了,只要当前项目 composer.json 里有 repositories 块,它就会优先生效。常见残留形式包括:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
"repositories": { "packagist": { "type": "composer", "url": "https://mirrors.aliyun.com/composer/" } }-
"repositories": { "packagist.org": false }(这直接关掉了默认源,且没给替代,会导致找不到包)
临时绕过项目配置可运行:composer config repo.packagist composer https://packagist.org(不加 -g),但长期建议直接编辑 composer.json 删除整个 repositories 字段。
缓存不清 = 白操作
换源后不执行 composer clear-cache,Composer 仍会从本地缓存读取旧镜像的 packages.json 快照,导致 composer update 找不到新版本、锁文件错乱、甚至报 Could not parse version constraint。
验证是否真还原成功,不能只看命令输出,要实测网络请求:
- 运行:
composer require monolog/monolog --no-install -vvv - 滚动日志中找
Downloading https://开头的行——正确应含https://repo.packagist.org,不是任何镜像域名 - 若仍见
mirrors.aliyun.com,说明某层配置或缓存仍有残留
最易被忽略的是环境变量和项目级 repositories 的双重覆盖,这两处不清理,删全局配置毫无意义。










