必须同时满足键名repo.packagist、type值composer、URL为HTTPS且末尾带/,三者缺一即静默回退官方源;验证需执行composer config -g repo.packagist看JSON输出,并用composer require -vvv确认实际请求URL。

composer config -g repo.packagist 必须带 HTTPS 且末尾斜杠
HTTP 协议在 Composer 2.0+ 中默认被拦截,不写 https:// 开头会静默 fallback 到官方源,且不报错。URL 还必须以 / 结尾,否则请求路径拼接成 /composerpackages.json 导致 404。
正确命令只有一种写法:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
-
https://不可换成http://,哪怕镜像站支持 HTTP,Composer 也会拒绝 - 末尾
/缺失时,composer config -g repo.packagist可能仍输出 JSON,但实际请求失败 - Windows 用户执行后需重启终端;Linux/macOS 若用
sudo,配置写入/root/.composer/config.json,普通用户运行时读不到
验证 HTTPS 镜像是否真正接管网络请求
composer config -g repo.packagist 输出 JSON 只说明“你写了”,不代表 Composer 正在用它。真正生效要看真实 HTTP 请求。
执行以下两步验证:
composer clear-cache && composer require monolog/monolog -vvv 2>&1 | grep "packages.json"
- 应看到类似
GET https://mirrors.aliyun.com/composer/packages.json - 若出现
https://packagist.org/packages.json或https://repo.packagist.org/packages.json,说明被项目级repositories字段覆盖 - 也可运行
composer diagnose,看Repo packagist.org:行显示的 URL 是否为镜像地址
项目级配置也必须强制 HTTPS,且不能覆盖私有源
进项目根目录执行 composer config repo.packagist composer https://mirrors.cloud.tencent.com/composer/(不加 -g)会全量替换 composer.json 中的 repositories 字段——已有私有 VCS 源会被清空。
- 想保留私有源,应手动编辑
composer.json,在repositories数组中显式添加:{"packagist": {"type": "composer", "url": "https://mirrors.163.com/composer/"}} - 同时确保根节点有
"packagist.org": false,否则 packagist.org 仍会参与解析 - 项目级配置优先级高于全局,但一旦删掉
composer.json中的repositories段,就退回到全局设置
HTTPS 配置后仍卡在 Downloading github.com?不是协议问题
镜像源只代理元数据(packages.json),不托管 ZIP 包。若 composer.lock 里记录的是原始 GitHub 的 dist.url,Composer 仍会直连 codeload.github.com。
- 必须删除
vendor/和composer.lock,再跑composer install -vvv,让 Composer 重新生成镜像域名的 dist URL - CI/CD 中推荐用
composer update --repository-url=https://mirrors.aliyun.com/composer/,它完全忽略所有已配置仓库,只连该地址 - 某些包硬编码了
dist.url(如私有 GitLab release 链接),镜像无法干预,需靠COMPOSER_DISABLE_FUNCTIONS强制走镜像,但有兼容风险
HTTPS 镜像配置最易被忽略的点是:URL 末尾斜杠、type 值显式声明、缓存与锁文件清理三者缺一不可。少一个,就等于没配。


















