根本原因是默认源packagist.org位于欧洲,国内直连导致DNS解析慢、TCP建连不稳定、TLS握手超时;应优先永久配置腾讯云镜像:composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer。

Composer install/update 卡在 downloading 或 hanging,根本原因是默认走 packagist.org
packagist.org 服务器在欧洲,国内直连 DNS 解析慢、TCP 建连不稳定、TLS 握手常超时,composer install 经常卡在 Downloading https://packagist.org/packages.json 这一步,甚至直接报 cURL error 28: Operation timed out。这不是你网络差,是默认源没换。
临时切换镜像:用 --repository 参数快速验证是否生效
不改全局配置也能立刻跑起来,适合 CI/CD 或临时调试:
- 加
--repository=https://packagist.phpcomposer.com(已停用,仅作历史参考) - 推荐用
--repository=https://packagist.proxy.fly.dev(社区维护、无认证、响应快) - 或用腾讯云镜像:
--repository=https://mirrors.cloud.tencent.com/composer
示例命令:composer create-project laravel/laravel demo --repository=https://mirrors.cloud.tencent.com/composer。如果秒出依赖树,说明镜像可用;若仍卡住,检查本地是否被代理/防火墙拦截了 HTTPS 请求。
永久配置国内镜像:改 user-level config,别碰 global repo 设置
运行 composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer 即可。注意三点:
- 必须用
repo.packagist这个 key,不是repositories数组 —— 后者是为私有包准备的,设错会导致composer update报Invalid repository type - 不要用
composer config -g repositories.packagist,这是旧版写法,新版 Composer(2.2+)会忽略 - 执行后可查证:
composer config -g repo.packagist应返回镜像 URL;再跑composer show -p,看第一行是否显示packages.json来源是你配的地址
阿里云 / 华为云镜像偶尔 503,优先选腾讯云或 proxy.fly.dev
阿里云镜像(https://mirrors.aliyun.com/composer/)和华为云(https://mirrors.huaweicloud.com/composer/)在流量高峰时会出现 503 Service Temporarily Unavailable,尤其凌晨或大促期间。实际压测下来:
- 腾讯云镜像平均响应
-
https://packagist.proxy.fly.dev是反向代理 + Cloudflare 缓存,对小包(如packages.json)几乎零延迟 - 别用
https://packagist.phpcomposer.com—— 已于 2022 年下线,现在访问会 302 跳转到不可靠的第三方页面
镜像不是越“大厂”越好,关键是缓存策略和节点稳定性。换完记得清下 Composer 自己的缓存:composer clear-cache,否则旧包可能还在本地缓存里骗你。











