Composer镜像配置必须满足三条件才生效:字段名用repositories.packagist.org(非repo.packagist),值为{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"},且URL末尾必须带/;否则静默回退官方源。

直接换国内全量镜像源,90% 的“failed to download”“retrying”“卡在 Downloading…”问题当场消失。但镜像不是配了就一定生效,错一个字符、少一个斜杠、用错字段名,Composer 就会安静地退回到 packagist.org,连错误提示都不给你。
确认当前用的到底是哪个源
别只看配置命令有没有报错,得看 Composer 实际发请求时连的是谁:
- 运行
composer diagnose,找到Repo packagist.org:这一行,后面显示的域名必须是你配的镜像地址(比如mirrors.aliyun.com),而不是packagist.org - 或者新建空目录,执行
composer init -n && composer require monolog/monolog -vvv,第一行日志里Downloading https://...的域名要匹配你的镜像 - 如果仍走官方源,立刻检查项目级配置是否覆盖了全局:运行
composer config repo.packagist(不加-g),有输出就说明项目自己写了源,优先级更高
配镜像时三个硬性条件缺一不可
尤其 Composer 2.2+ 版本,字段名、结构、URL 格式三者必须同时满足,否则静默失效:
- 字段名必须是
repositories.packagist.org(不是repo.packagist,也不是repos.packagist) - 值必须是完整 JSON 对象,显式声明
{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"};只写 URL 字符串会被当普通字符串存,不识别为源 -
url必须以/结尾:https://mirrors.aliyun.com/composer/✅,https://mirrors.aliyun.com/composer❌(否则拼路径变成/packages.json→/composer/packages.json,直接 404)
阿里云/腾讯云/清华源怎么选?别只看速度
不同镜像同步节奏和稳定性差异明显,选错反而更慢:
- 阿里云镜像同步延迟通常 1–6 小时,适合日常开发;但新发布的包(如刚上
packagist.org的laravel/pint v1.13.0)可能还没收录,此时composer show -p vendor/package返回空,而官网页面能打开,基本就是同步未到 - 腾讯云 CDN 覆盖广,某些地区响应更快,适合阿里云偶尔超时的场景;验证时重点看
composer config -g repositories.packagist.org输出是否含mirrors.cloud.tencent.com且无packagist.org字样 - 清华源需手动编辑
composer.json,并在repositories下显式添加"packagist.org": false,否则私有源可能干扰;适合 CI/CD 流程中要求配置可追踪、不依赖全局环境的项目
镜像配好了还失败?先绕过它验证是不是源的问题
别急着改配置文件,用临时命令强制走官方源测试:
- 执行
composer config --global repositories.packagist.org '{"type": "composer", "url": "https://packagist.org/"}' - 再跑
composer require vendor/package -vvv,观察是否成功下载dist包 - 若成功,说明确实是镜像同步延迟或临时不可用;失败则继续排查 TLS、代理或 PHP OpenSSL 配置(比如
curl error 60常因 CA 证书路径不对) - 注意:
composer config --unset repos.packagist.org在新版中已不推荐,可能意外禁用整个packagist.org源
真正容易被忽略的是:某些包(比如带 dev- 前缀或 dev-main 分支约束的)根本不会查 Packagist 元数据,而是直连 GitHub/GitLab 下 ZIP,这时候镜像源完全不起作用——你得换稳定版约束,或者单独配 GitHub OAuth Token。











