Composer全局镜像配置未生效的根本原因是项目级composer.json中的repositories字段优先级高于全局设置,只要存在该字段(含空数组),全局配置即被完全覆盖;验证需执行composer config repo.packagist(无-g)检查项目级实际生效源,并清除环境变量COMPOSER_REPO_PACKAGIST及缓存。

composer config -g repo.packagist 设置后为什么没生效
全局配置写入的是用户目录下的 composer.json,但 Composer 会优先读取项目级配置(即当前目录的 composer.json),如果项目里有 repositories 字段,就会覆盖全局设置。执行 composer config -g repo.packagist 看到的值只是“写进去了”,不代表当前项目在用它。
- 先确认是否在项目根目录下操作:项目级配置优先级更高,
composer config repo.packagist(不带-g)才是改当前项目的源 - 检查项目
composer.json是否手动写了repositories—— 有就删掉,否则清全局也没用 -
composer config -g --unset repos.packagist是错误写法,正确字段名是repo.packagist,不是repos.packagist
一键恢复默认源的可靠命令组合
Composer 官方默认源是 https://packagist.org,所谓“恢复默认”,本质就是把 repo.packagist 设为这个地址,并确保没有其他干扰仓库。最稳妥的做法是分两步清除再重设:
- 清除全局自定义镜像:
composer config -g --unset repo.packagist - 显式设回官方源:
composer config -g repo.packagist https://packagist.org - 顺手清缓存避免旧元数据干扰:
composer clear-cache
注意:不要用 composer config -g repo.packagist '' 清空字符串,这会导致 Composer 报错 Repository "packagist" is invalid。
中文镜像残留常被忽略的两个位置
除了 composer config -g,中文镜像还可能藏在以下两处,不清理会导致“明明删了配置却还在走镜像”:
- 环境变量
COMPOSER_REPO_PACKAGIST:运行echo $COMPOSER_REPO_PACKAGIST(Linux/macOS)或echo %COMPOSER_REPO_PACKAGIST%(Windows)检查,存在就用unset COMPOSER_REPO_PACKAGIST或对应系统方式清除 - 项目级
composer.json中的repositories数组:哪怕只有一行{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"},也会完全接管包发现逻辑
验证是否真的回到官方源
最直接的办法不是看配置,而是观察实际请求行为:
- 加
-v参数安装一个包:composer require monolog/monolog -v - 在输出日志里搜
Downloading https://packagist.org—— 如果出现的是mirrors.aliyun.com或packagist.phpcomposer.com,说明还有残留 - 也可以临时禁用所有自定义源测试:
composer install --no-plugins --no-scripts -v,排除插件干扰
真正干净的状态是:既没报错,又没出现任何镜像域名,且 composer config -g repo.packagist 输出 https://packagist.org。


















