因为Composer 2.x实际使用repos.packagist(复数带s)字段,而误删repo.packagist(单数)无效;且需配合clear-cache、逐层排查项目级repositories和环境变量覆盖,否则仍走镜像。

composer config -g --unset repos.packagist 为什么没用?
因为字段名写错了。Composer 2.x 全局镜像配置实际存的是 repos.packagist(复数、带 s),但很多人设镜像时用的是 repo.packagist(单数),删错字段等于白操作。
常见错误组合:
- 执行
composer config -g --unset repo.packagist→ 实际删的是一个不存在或无关的字段 - 漏掉
-g,只删了当前项目composer.json里的repositories,全局照旧 - 误删
repositories整个键,可能连私有源也一起干掉了
正确验证方式:composer config -g repos.packagist 应返回 Key "repos.packagist" does not exist 或空输出。
还原后 install 还走阿里云?检查三层覆盖链
Composer 查源顺序是:环境变量 > 当前项目 composer.json > 全局配置。哪怕你全局删干净了,只要项目里还留着 repositories 块,它就优先生效。
必须逐层排查:
- 查项目级:
grep -A 5 '"repositories"' composer.json(Linux/macOS)或直接打开文件搜索 - 查环境变量:
env | grep COMPOSER_REPO_PACKAGIST(Linux/macOS),有输出就得先unset COMPOSER_REPO_PACKAGIST - 若项目中存在
"packagist.org": false这类禁用写法,删repos.packagist没用,得手动删整个repositories块
临时绕过项目配置可运行:composer config repo.packagist composer https://packagist.org(不加 -g)。
clear-cache 不做 = 还原白做
缓存不清理,Composer 会继续读取旧镜像下载下来的 packages.json 快照,导致 composer update 找不到新包、版本错乱、甚至锁文件更新失败。
清缓存后必须验证是否真生效:
- 运行
composer require monolog/monolog --no-install -vvv - 滚动日志里找
Downloading https://开头的行 —— 正确应含https://repo.packagist.org,不是任何镜像域名 - 如果仍见
mirrors.aliyun.com,说明某层配置或缓存还有残留
离线环境里还原镜像源只是第一步
真正关键的是后续行为控制。光切回官方源没用,COMPOSER_DISABLE_NETWORK=1 必须提前设好,否则 composer install 仍会强制请求远程元数据而失败。
离线安装最小安全命令组合:
-
COMPOSER_DISABLE_NETWORK=1(环境变量,必须) composer install --no-plugins --no-scripts --no-autoloader- 执行完立刻补:
composer dump-autoload -o,否则运行时大概率Class not found
最容易被忽略的一点:别只测 composer --version 就算成功。断网后跑一次完整 install 流程,才是唯一有效验证。











