Composer镜像配置在项目级composer.json、全局~/.composer/config.json、环境变量COMPOSER_REPO_PACKAGIST三层生效,优先级依次递减;需精准删除repos.packagist键而非整个repositories对象,并清缓存、删composer.json中repositories块、验证真实请求URL。

确认镜像配置在哪一层生效
Composer 镜像不是“开关”,而是靠 repos.packagist(或旧写法 repo.packagist)这个键值对控制的,且优先级为:项目级 composer.json > 全局配置 ~/.composer/config.json > 环境变量 COMPOSER_REPO_PACKAGIST。只删全局配置,项目里还留着 "repositories" 字段,照样走镜像。
先快速定位:
- 运行
composer config -g repos.packagist,有输出说明全局设了(注意是复数repos) - 进项目目录,运行
composer config repos.packagist(不加-g),有输出就是项目级覆盖 - 执行
echo $COMPOSER_REPO_PACKAGIST(Linux/macOS)或echo %COMPOSER_REPO_PACKAGIST%(Windows),非空即被环境变量劫持
删配置别用 --unset repositories
这是最常踩的坑:composer config --unset repositories 会清空整个 repositories 对象,把你加的私有 Git 源、GitHub repo 或其他自定义源全干掉——这不是撤销镜像,是误删所有源。
正确做法永远精准到键名:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 删全局镜像:
composer config -g --unset repos.packagist(推荐)或composer config -g --unset repo.packagist(兼容旧写法) - 删项目级镜像:
composer config --unset repos.packagist(同理也补一句--unset repo.packagist) - 删完立刻验证:
composer config -g repos.packagist应报 “Key does not exist”,不是空 JSON 或null
别忘了清缓存和检查 composer.json
删完配置不等于立刻生效。Composer 缓存的是 provider 文件路径和元数据快照,旧镜像地址还在缓存里,composer install 仍可能发请求到 mirrors.aliyun.com。
必须做三件事:
- 执行
composer clear-cache(强制刷新本地缓存) - 打开项目根目录的
composer.json,手动删掉整个"repositories": [...]块(哪怕它只是空数组[],也会禁用默认源) - 如果
composer.lock是之前用镜像生成的,里面记录的 dist URL 还指向镜像站,建议删掉composer.lock和vendor/后再跑composer install
验证是否真回到 packagist.org
别信 composer config 的输出,要抓真实请求。最直接的方法:
- 运行
composer require monolog/monolog --no-install -vvv 2>&1 | grep -i 'GET https'(Linux/macOS),看日志里出现的是https://repo.packagist.org还是镜像域名 - Windows 用户可用
composer diagnose -v,末尾行应显示Checking https://packagist.org/packages.json - 若仍走镜像,90% 是
composer.json里残留了"repositories",或COMPOSER_REPO_PACKAGIST环境变量没 unset
镜像配置本身没有“启用/禁用”状态,只有“存在/不存在”。只要 repos.packagist 这个键还在任意一层配置里,Composer 就会尝试请求它——哪怕 URL 写错了,也会卡住或 fallback,而不是自动跳过。

















