必须执行composer config -g --unset repos.packagist并运行composer clear-cache,才能真正断开镜像;只删内容不删键或未清缓存,composer仍会请求旧镜像。

删掉 repos.packagist 这个键,再清缓存,才能真正断开镜像;只改 URL 或删内容不删键,Composer 仍会尝试请求它。
怎么确认镜像配置还活着
镜像不是“开关”,而是靠特定配置键触发的。最准的检查方式是直接查键是否存在:
- 运行
composer config -g repos.packagist—— 若输出非空(比如显示阿里云或腾讯云 URL),说明全局镜像已生效 - 运行
composer config repos.packagist(不加-g)—— 查项目级是否覆盖了全局设置 - 运行
env | grep COMPOSER_REPO_PACKAGIST(Linux/macOS)或echo %COMPOSER_REPO_PACKAGIST%(Windows)—— 环境变量优先级最高,容易被忽略
删配置必须用 --unset,不能只清空值
很多人手动编辑 ~/.composer/config.json,把 "url" 改成 "https://packagist.org",这没用。Composer 只认 repos.packagist 这个键存不存在:
- 正确操作:
composer config -g --unset repos.packagist(注意是复数repos,不是repo) - 如果不确定当初设的是哪种写法,顺手补一句:
composer config -g --unset repo.packagist(旧版兼容) - 项目级删法:
composer config --unset repositories.packagist.org(新版键名),或直接删composer.json里的整个"repositories": {...}块
删完不清理缓存 = 白删
Composer 会把镜像源的 packages.json 缓存在本地,即使配置已删,它仍从缓存读旧元数据,导致 composer update 找不到新版本、composer show -p 显示的仍是镜像域名:
- 必须执行:
composer clear-cache - 验证缓存是否真清空:
ls -la ~/.composer/cache/(Linux/macOS)应为空或只剩空子目录;Windows 下看%APPDATA%\Composer\Cache\ - 如果之后
composer diagnose还报Repo packagist.org是镜像地址,说明某处残留未清干净
为什么删了还走镜像?三个隐蔽源头
常见“删了没用”现象,基本都卡在这三处:
- 项目根目录的
composer.json里还留着"repositories"字段(哪怕只有一行{},也得整个字段删掉,别留空对象) - CI/CD 脚本、Dockerfile 或 IDE 插件静默写入了镜像配置,它们不会出现在
composer config --list里,得用grep -r "mirrors\|aliyun\|tuna" .扫一遍 - 某些代理工具(如
composer-proxy)在后台监听并重写请求,临时停掉服务再试一次composer install就能验证
真正麻烦的不是删不掉,而是删得不全——尤其是 repos.packagist 键名拼错、缓存漏清、或环境变量藏在 shell 配置深处没动过。











