最稳还原方式是依次清理环境变量、项目级repositories、全局repo.packagist和repos.packagist,并执行composer clear-cache,最后用composer require --no-install -vvv验证下载URL是否为https://repo.packagist.org。

还原 Composer 国内源不是“多此一举”,而是因为镜像配置一旦写入,就会持续影响所有项目,且存在三层覆盖逻辑(环境变量 > 项目级 > 全局),不主动清理就永远走镜像——哪怕你只在某个测试项目里临时设过。
为什么删了全局配置还走阿里云/腾讯云
Composer 查源顺序是硬编码的:环境变量优先于项目配置,项目配置又盖掉全局。所以即使你执行了 composer config -g --unset repos.packagist,只要下面任一条件成立,请求仍会发往镜像站:
- 当前项目
composer.json里有"repositories"字段(哪怕只是{}或{"packagist.org": false}) - 设置了环境变量
COMPOSER_REPO_PACKAGIST(Linux/macOS 执行env | grep COMPOSER_REPO,Windows 执行echo %COMPOSER_REPO_PACKAGIST%) - 之前用过老写法
repo.packagist(单数),而你只删了repos.packagist(复数),两者并存时旧字段仍生效
还原官方源最稳的操作路径
别只信“删一个字段”,要按顺序清三层:
- 先清环境变量:
unset COMPOSER_REPO_PACKAGIST(Linux/macOS)或set COMPOSER_REPO_PACKAGIST=(Windows) - 再清项目级配置:进项目目录后运行
composer config --unset repositories,或手动删掉composer.json中整个"repositories"块 - 最后清全局:执行
composer config -g --unset repos.packagist和composer config -g --unset repo.packagist(两个都删,防旧残留)
注意:所有 config --unset 命令必须带 -g 才作用于全局;漏掉就只改当前项目,对其他项目无效。
缓存不清 = 配置白改
即使上面三步全做完,composer update 仍可能从 mirrors.aliyun.com 下载——因为缓存里还存着旧镜像的 packages.json 快照,Composer 会直接读它,根本不会发起新请求去验证源地址。
- 必须执行:
composer clear-cache - 验证缓存是否真清空:
ls -la ~/.composer/cache/(Linux/macOS)或dir %APPDATA%\Composer\Cache\(Windows),目录应为空或只剩空子目录 - 最终验证方式不是看命令输出,而是跑:
composer require monolog/monolog --no-install -vvv,滚动日志里找Downloading https://行——正确 URL 是https://repo.packagist.org,不是任何镜像域名
误删配置或不确定怎么恢复
Composer 没有撤销机制,也没有“重置为默认”命令。删错就只剩两个选择:
- 手动编辑全局配置文件:
~/.composer/config.json(Linux/macOS)或%APPDATA%\Roaming\Composer\config.json(Windows),把误删字段补回去,或删掉多余项 - 或者干脆删掉整个
config.json文件,再运行任意composer命令(比如composer --version),它会自动生成一个干净的默认配置
注意:删配置文件不会影响已安装的包,也不会重置 process-timeout、secure-http 等其他字段——它们的值由 Composer 内部硬编码决定,不是从配置文件“读出来”的。


















