composer config -g --unset repos.packagist 能清除全局镜像配置,但因项目级 repositories 字段、环境变量或本地缓存干扰,常不立即生效;需同步检查项目 composer.json、清空缓存(composer clear-cache)并验证实际请求 URL。

composer config -g --unset repos.packagist 这条命令能清掉全局镜像配置,但大概率不会立刻生效——因为项目级配置、环境变量或缓存还在干扰。
为什么 composer config -g --unset repos.packagist 没反应?
Composer 查源顺序是:环境变量 > 项目 composer.json 中的 repositories > 全局配置。删了全局,只要项目里写了 "repositories",它就直接跳过你刚删掉的那层。
- 检查项目是否硬编码了源:
grep -A 5 '"repositories"' composer.json(Linux/macOS)或直接打开composer.json搜repositories - 看有没有禁用官方源:
"packagist.org": false这种写法会让 Composer 彻底忽略默认源,仅删全局毫无意义 - 查环境变量干扰:
env | grep COMPOSER_REPO(Linux/macOS)或echo %COMPOSER_REPO_PACKAGIST%(Windows),有值就得unset或set清空
怎么验证当前到底走哪个源?
别信 composer config -g -l 的输出,它只显示“配置了什么”,不反映“实际用了什么”。真正有效的是抓实时请求:
- 运行
composer require monolog/monolog --no-install -vvv - 盯住终端输出里形如
Downloading https://...的那一行 URL - 正确应为
https://repo.packagist.org;如果还是mirrors.aliyun.com或huaweicloud.com,说明某处残留没清干净
composer clear-cache 不是可选项,是必做动作
缓存不清理 = 白还原。Composer 会把旧镜像返回的 packages.json 快照存在本地,即使源已切回官方,它仍按缓存里的旧元数据找包,导致 composer update 找不到新版本、composer.lock 更新失败、甚至报 Package not found 错误。
- 执行
composer clear-cache后,再跑一次composer require ... -vvv验证 - 华为云/腾讯云用户注意路径格式差异:华为云地址末尾是
/repository/php/,不是/composer/;腾讯云是/composer/,别抄错成其他镜像的路径
临时绕过所有自定义源的终极验证法
当你不确定哪层配置在作祟,又不想动代码时,用这个命令强制走官方源:
composer install --no-plugins --repository=https://packagist.org -vvv
如果这时下载变快、URL 显示正确,就坐实了是项目或全局配置问题。这时候再回头删 composer.json 里的 repositories 块,或者确认 --unset 是否真删对了键名(必须是 repos.packagist,不是 repo.packagist 或 packagist.org)。
项目里手动写的 repositories 是最常被忽略的一环,删之前先 git diff composer.json 看一眼,避免误删其他必要仓库配置。


















