composer全局镜像配置必须同时满足三个硬性条件:-g参数不可省略、键名严格为repo.packagist(单数)、url须为https://开头且末尾带/,缺一则静默回退官方源。

composer config -g repo.packagist 命令必须写对三个硬性条件
全局镜像配置不是“试试看”,漏掉任意一个就静默失效,composer install 仍卡在 Downloading https://packagist.org/packages.json。你看到的慢,90% 是命令没生效,不是网络问题。
必须同时满足:
-
-g参数不能省——缺了就只改当前目录的composer.json,换项目就失效 - 键名必须是
repo.packagist(单数repo,不是repos.packagist或packagist.org) - URL 必须是
https://mirrors.aliyun.com/composer/这种格式:带https://、末尾有/、不加/packages.json
正确执行:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
验证是否成功:composer config -g repo.packagist,输出必须是类似 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} 的完整 JSON。如果为空、报错或还是 https://packagist.org,说明没写对。
为什么配了镜像,composer install 还卡在 Resolving dependencies?
镜像源只加速下载,不解决依赖解析慢的问题。Resolving dependencies 卡住,基本和网络、镜像无关,而是本地环境或配置问题。
常见原因:
-
composer.lock缺失或未提交——Composer 被迫重算整个依赖图 -
"minimum-stability": "dev"在composer.json中开启,触发大量版本试探 - 项目引用了已下线或不可达的私有仓库,Composer 逐个超时重试(每个 30 秒)
- CLI 模式下 PHP 的 OPcache 被禁用,导致 Composer 自身反复编译
快速定位:composer diagnose 查是否提示 Repo packagist.org is default;再运行 composer config --list --global | grep repositories 确认实际生效的是哪个源。
宝塔、Docker、CI 环境下镜像配置容易踩的坑
全局配置写在 ~/.composer/config.json,但不同环境读不到同一个路径。
典型问题:
- 你在终端用
sudo composer config -g,结果配置写进了/root/.composer/config.json;但宝塔后台或 Nginx + PHP-FPM 是以www用户运行的,根本不会去读/root/下的配置 - Docker 或 CI 构建中,并发 job 共享
~/.composer/config.json,导致镜像错乱 - 项目根目录下只要存在
composer.json且含"repositories"字段(哪怕只写了{}或{"packagist.org": false}),全局配置就彻底失效
解决方案:
- 确认当前用户:
whoami,再检查对应家目录下的.composer/config.json - CI 中用
COMPOSER_HOME=/tmp/composer-home-$$隔离配置路径 - 项目级换源时,必须显式写
"packagist.org": false,且把国内镜像放"repositories"数组第一位
并发下载和缓存清理是提速刚需
Composer 2.2+ 默认并发数是 3,等于没开并行。不调这个值,哪怕镜像再快,下载仍是瓶颈。
设置方式:
- 全局启用:
composer config -g parallel-downloads 10 - CI 脚本中显式带上:
composer install --prefer-dist --no-d --optimize-autoloader
换源后必须执行:composer clear-cache。否则旧缓存里的 packagist.org 元数据仍会主导后续请求,看起来像“没反应”,其实是反复重试失败。
验证是否真走镜像:加 -vvv 参数跑一次安装,日志里必须出现 mirrors.aliyun.com,而不是 packagist.org 或已停用的旧地址(如 packagist.phpcomposer.com)。











