答案是删错字段名(如误删repos.packagist而实际生效的是repo.packagist)是还原失败主因,必须同时执行composer config -g --unset repo.packagist和--unset repos.packagist,并清除缓存、检查项目级repositories及环境变量COMPOSER_REPOSITORY_PACKAGIST。

删错字段名是还原失败的最常见原因
很多人执行 composer config -g --unset repos.packagist 后发现还是走阿里云,其实是因为 Composer 2.x 实际读取的是 repos.packagist(复数、带 s),而设镜像时用的是 repo.packagist(单数)。这两个字段互不干扰——删了 repo.packagist,repos.packagist 还在生效;反之亦然。
必须分别清理:
composer config -g --unset repo.packagistcomposer config -g --unset repos.packagist
漏掉任意一个,残留配置就会继续接管源地址。验证是否删净:运行 composer config -g repo.packagist 和 composer config -g repos.packagist,两者都应返回 Key "xxx" does not exist 或空输出。
项目级 repositories 字段会完全屏蔽全局设置
哪怕你把全局配置删得干干净净,只要当前项目根目录的 composer.json 里有 "repositories" 字段,Composer 就会优先使用它,且不会 fallback 到全局或默认源。
检查方式:
-
grep -A5 '"repositories"' composer.json(Linux/macOS) - 或直接打开
composer.json搜索repositories
常见陷阱包括:
- 空对象:
"repositories": {}—— 仍会屏蔽默认源 - 禁用默认源:
"packagist.org": false—— 没配替代源就等于断网 - 旧腾讯云地址残留:
"url": "https://mirrors.cloud.tencent.com/composer/"—— 该地址自 2024 年 10 月 1 日起已返回 404
安全清除命令:composer config --unset repositories(不加 -g,只作用于当前项目)。
缓存不清,配置白清
Composer 的元数据(如 packages.json)缓存在本地,即使配置已删、URL 已重置,composer install 仍可能从旧缓存拉取信息,导致请求发往镜像域名而非 packagist.org。
必须执行:
-
composer clear-cache—— 清除所有包元数据和 dist 缓存 - 删掉
vendor/目录(可选,但推荐,避免 autoload 映射残留) - 删掉
composer.lock(可选,但若想确保全新解析依赖图,建议删)
验证缓存是否真清干净:运行 composer diagnose,看 “Repo packagist.org:” 后面显示的 URL 是否为 https://packagist.org;再跑 composer show monolog/monolog --no-install -vvv 2>&1 | grep "GET ",确认日志中出现的是 https://repo.packagist.org 而非任何镜像域名。
环境变量可能悄悄覆盖你的所有操作
Composer 支持通过环境变量强制指定源,且它的优先级高于任何 JSON 配置。如果设置了 COMPOSER_REPO_PACKAGIST,无论你删多少次配置、清多少次缓存,它都会生效。
检查方式:
- Linux/macOS:
echo $COMPOSER_REPO_PACKAGIST - Windows:
echo %COMPOSER_REPO_PACKAGIST%
如果输出非空,说明环境变量正在接管源地址。临时禁用可在命令前加 COMPOSER_REPO_PACKAGIST= composer install;永久清除需检查 shell 配置文件(如 ~/.bashrc、~/.zshrc)或系统环境变量设置。
真正还原成功的标志不是命令没报错,而是 composer require xxx --no-install -vvv 日志里第一行元数据请求地址明确是 https://repo.packagist.org/packages.json,且后续所有 Downloading 行都不含任何镜像域名——这点最容易被忽略,也最能暴露残留问题。











