还原是指删除项目级自定义镜像配置(如config.repo.packagist、mirrors或repositories中手动添加的镜像),使Composer回退至全局或默认官方源;需检查并清除composer.json中相关字段,再运行composer update --lock刷新lock文件,并通过composer clear-cache和composer require -vvv验证请求域名是否为packagist.org。

Composer 的 composer.json 里没有镜像配置,还原什么?
Composer 本身不保存“当前目录的局部镜像”——它没有这个概念。所谓“局部镜像”,其实是通过 config.repo.packagist 或 config.mirrors 手动设置的临时仓库地址,只对当前项目生效(即写在项目根目录的 composer.json 里)。还原,就是删掉这些自定义配置,让 Composer 回退到全局或默认的 Packagist 官方源。
怎么删掉项目级镜像配置?
检查并清理 composer.json 中的镜像相关字段:
-
"config": { "repo.packagist": "https://packagist.org" }—— 这是显式指定官方源,直接删掉整行或整个repo.packagist键 -
"config": { "mirrors": { ... } }—— 已废弃(v2.0+ 不再支持),必须删除,否则composer install会报错Unknown config setting mirrors -
"repositories"数组里手动加的 packagist 镜像(如{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"})—— 如果只用于替换主源,也应移除
删完后运行 composer update --lock(不带 --dry-run),让 lock 文件重新基于官方源解析依赖。别用 install,它只读 lock,不会刷新源映射关系。
为什么删了还是走镜像?可能是全局配置在干扰
项目级删干净了,但 composer install 仍走国内镜像,大概率是全局配置在起作用:
- 运行
composer config -g repo.packagist查看是否设置了全局镜像 - 运行
composer config -g --list | grep mirror检查有没有残留的mirrors(虽然已废弃,但旧版可能还留着) - 全局删镜像:执行
composer config -g --unset repos.packagist(注意键名是repos.packagist,不是repo.packagist)
全局配置优先级高于项目级,不清理它,项目里删得再干净也没用。
验证是否真还原成功
最直接的方式是触发一次真实请求,观察域名:
- 临时禁用所有缓存:
composer clear-cache - 用
-vvv看详细日志:composer require monolog/monolog -vvv 2>&1 | grep "GET https" - 如果看到
GET https://packagist.org/p2/monolog/monolog.json,说明已回官方源;若仍是mirrors.aliyun.com或packagist.phpcomposer.com,说明还有某处配置没清干净
注意:Packagist 官方源在国内访问慢是常态,别因为卡顿就误判为“没还原成功”——关键看请求发往哪个域名,而不是响应快慢。











