Composer镜像配置不在composer.json中,而在全局配置文件(~/.composer/config.json或%APPDATA%\Composer\config.json)或项目级repositories字段中;还原官方源应执行composer config -g repo.packagist composer https://packagist.org并清缓存。

Composer 的 composer.json 镜像配置存在哪?
Composer 本身不存储“镜像地址”在 composer.json 里,它只管依赖声明;镜像配置实际在全局或项目级的配置文件中。手动还原镜像,本质是删掉或覆盖掉被改写过的源配置。
常见位置有三个:
-
~/.composer/config.json(Linux/macOS)或%USERPROFILE%\AppData\Roaming\Composer\config.json(Windows)—— 全局配置,影响所有项目 -
./composer.json同级目录下的auth.json—— 一般只存认证凭据,不存镜像 -
./composer.json里通过repositories字段硬编码的镜像(极少见,但有人这么干)
怎么用命令行快速还原为官方源?
最稳妥的方式不是手动编辑 JSON 文件,而是用 composer config 命令重置。执行以下任一操作即可:
- 清空全局镜像:
composer config -g --unset repos.packagist - 强制设回官方源(推荐):
composer config -g repo.packagist composer https://packagist.org - 如果之前用过阿里、腾讯等镜像,大概率是通过
composer config -g repos.packagist composer https://mirrors.aliyun.com/composer/设置的,直接用上面那条命令覆盖掉就行
注意:repo.packagist 是键名,不能写成 repos.packagist(旧版写法),v2+ 的 Composer 默认识别单数形式。
为什么改了配置后 composer install 还走旧镜像?
有两个高频原因:
- 项目目录下存在
composer.lock,且其中记录了旧镜像下载的包 URL —— Composer 会优先按 lock 文件还原,不会重新解析源。解决办法:删掉composer.lock再跑composer install(确保composer.json本身没硬编码错的repositories) - 用了
COMPOSER_REPO_PACKAGIST环境变量(比如 CI 脚本里 export 过),它优先级高于 config 文件。检查方式:echo $COMPOSER_REPO_PACKAGIST(Linux/macOS)或echo %COMPOSER_REPO_PACKAGIST%(Windows)
顺带一提:composer diagnose 会提示当前生效的仓库地址,比翻配置更直观。
手改 config.json 文件要注意什么?
如果非得手动编辑,打开 ~/.composer/config.json 后重点看 repositories 或 repo 字段:
- 删除整个
"packagist": { "type": "composer", "url": "https://..." }条目(如果存在) - 不要留空
"repositories"数组,要么删掉这个 key,要么确保它是"repositories": []或干脆不存在 - JSON 格式必须合法,少个逗号或引号都会导致后续所有
composer命令报json_decode(): syntax error
改完建议立即执行 composer config -g -l 确认输出里不再出现非官方的 packagist url。
真正容易被忽略的是 lock 文件和环境变量这两层缓存,很多人只改 config 就以为搞定了,结果 install 还是从镜像拉包。


















