根本原因是 packagist.org 域名解析、tls 握手及 cdn 路由在国内不稳定,导致 tcp 连接重试或重定向失败;有效解决方式是全局配置腾讯云镜像地址 https://mirrors.cloud.tencent.com/composer/(结尾斜杠不可省)。

为什么 composer install 卡在 downloading 或一直超时
根本原因不是网络差,而是默认源 packagist.org 的域名解析、TLS 握手、CDN 路由在国内不稳定,尤其凌晨或高峰时段。你看到的“慢”,大概率是 TCP 连接反复重试或 Composer 内部重定向失败,不是带宽瓶颈。
- 别用
ping packagist.org判断——它本身不响应 ICMP,结果无意义 - 别信“换 DNS 就行”——
114.114.114.114对 Composer 没用,它走 HTTPS,靠的是 SNI 和证书链验证 - 真正有效的切换点只有一个:
composer config改全局 repo,且必须用腾讯云镜像的正式地址
怎么安全设置腾讯云 Composer 镜像(非临时、非 alias)
腾讯云镜像地址是 https://mirrors.cloud.tencent.com/composer/,注意结尾有斜杠,少一个就会 404。设错会导致 composer update 报 Could not parse version constraint 这类误导性错误。
- 全局生效(推荐):
composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/ - 项目级生效(仅当前目录):
composer config repo.packagist composer https://mirrors.cloud.tencent.com/composer/ - 验证是否生效:
composer config -g repo.packagist应输出完整 URL,不是packagist或空 - 别用
composer config -g repositories.packagist.type composer这种写法——格式错,会把整个 repos 结构搞乱
composer create-project 还是慢?因为没走镜像
这个命令默认绕过全局 repo 配置,直接连原始源。不是 bug,是设计如此:它要确保新建项目依赖版本绝对可复现。
- 正确做法:先设好镜像,再加
--repository-url显式指定:composer create-project laravel/laravel myapp --repository-url=https://mirrors.cloud.tencent.com/composer/ - 如果提示
Package not found,检查 URL 末尾斜杠、大小写(laravel/laravel不是Laravel/Laravel) - 国内服务器上建议加
-vvv看真实请求地址,确认是否真发到了腾讯云 IP(如162.14.113.xxx)
换源后 composer update 出现 Root package requires xxx but it is not present
这不是镜像问题,是缓存污染。腾讯云镜像和官方源的元数据更新有数分钟延迟,而 Composer 本地 vendor/composer/installed.json 和 ~/.composer/cache/ 里可能还存着旧版包列表。
- 先清缓存:
composer clear-cache - 再删锁文件:
rm composer.lock(仅开发环境;生产环境应composer update --lock) - 最后重装:
composer install,别直接update——它会尝试合并新旧依赖图,容易冲突 - 如果用了
platform-check或config.platform,确保 PHP 版本声明和实际一致,否则镜像返回的包列表会被过滤掉










