恢复官方源须执行composer config -g --unset repos.packagist并运行composer clear-cache,因Composer在该键缺失时才自动回退至https://packagist.org;若字段名错写为repo.packagist、未清缓存或存在项目级配置/环境变量,仍会走镜像。

直接执行 composer config -g --unset repos.packagist 并运行 composer clear-cache,才能真正恢复官方源。只删配置不清理缓存,或字段名写错,都会导致仍走镜像。
为什么 composer config -g --unset repos.packagist 是首选操作
Composer 的源行为不是“读取默认值”,而是“字段不存在 → 自动启用 https://packagist.org”。repos.packagist(注意是复数 repos)这个键在全局配置中一旦被删除,Composer 就不再尝试 fallback 或解析镜像逻辑,直接走硬编码的官方路径。
- 必须加
-g:否则只删当前项目composer.json里的repositories,对其他项目无效 - 不能写成
repo.packagist(单数):这是旧版写法,2.0+ 中它不会触发官方回退,且不报错、无提示 - 如果之前混用过两种写法,建议连删两次:
composer config -g --unset repos.packagist和composer config -g --unset repo.packagist
为什么改完命令还是从阿里云/腾讯云下载
因为 Composer 查源顺序是:环境变量 > 项目级配置 > 全局配置。哪怕全局删干净了,只要下面任一条件成立,就仍走镜像:
- 当前项目
composer.json里有"repositories"块(用grep -A 5 '"repositories"' composer.json快速检查) - 设置了环境变量
COMPOSER_REPO_PACKAGIST(Linux/macOS 执行env | grep COMPOSER_REPO,Windows 用echo %COMPOSER_REPO_PACKAGIST%) - 项目内已执行过
composer config repo.packagist ...(不带-g),该配置优先级高于全局
验证当前实际生效源:进项目目录后运行 composer config repo.packagist,输出若为阿里云地址,说明就是项目级盖掉了。
缓存不清理 = 配置白改
composer clear-cache 不是可选项,是必做动作。旧镜像缓存的 packages.json 会继续提供包元数据,导致:
-
composer update找不到新版本(因为缓存里没同步) - 锁文件(
composer.lock)生成错误或版本错乱 - 即使 URL 已切回官方,
composer show -p仍显示旧包列表
清完后检查缓存目录是否真空:ls -la ~/.composer/cache/(Linux/macOS)或 dir %APPDATA%\Composer\Cache\(Windows),应为空或只剩空子目录。
怎么确认真的成功了
别信“命令没报错”,要观察真实网络请求:
- 运行
composer require monolog/monolog --no-install -vvv - 在日志中找类似
Downloading https://repo.packagist.org/packages.json的行 —— 注意域名必须是repo.packagist.org,不是mirrors.aliyun.com或任何镜像域名 - 如果看到
Loading config后紧接着是Downloading https://...,且 URL 包含packagist.org,才算真正切换成功
最容易被忽略的是:IDE(如 PHPStorm)可能在项目设置里悄悄注入镜像源,改完配置后记得检查 IDE 的 Composer 设置页。











