Composer install卡在downloading vendor包,根本原因是默认源packagist.org对国内用户DNS解析慢、TLS握手延迟高、下载中断多;需全局配置阿里云等国内镜像源(如composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/),并清理vendor和composer.lock以确保生效。

Composer install 为什么卡在 downloading vendor 包?
根本原因不是网络差,而是默认源 packagist.org 的 CDN 节点对国内用户响应慢、连接不稳定,尤其下载带二进制扩展(如 ext-redis)或大体积包(如 laravel/framework)时,经常超时或重试失败。
这不是 Composer 本身的问题,也不是你本地配置错了——是物理距离和路由导致的 DNS 解析慢 + TLS 握手延迟 + 下载中断重试多。直接换镜像源能立竿见影。
怎么切到国内镜像源(阿里云 / 清华 / 华为)?
推荐用全局配置,避免每个项目重复操作。执行以下任一命令即可:
阿里云镜像:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
清华大学镜像:composer config -g repo.packagist composer https://packagist.phpcomposer.com(已停用)
现应改用:composer config -g repo.packagist composer https://mirrors.tuna.tsinghua.edu.cn/composer/
华为云镜像:composer config -g repo.packagist composer https://mirrors.huaweicloud.com/repository/php/
- 执行后会写入全局配置文件
~/.composer/config.json,所有项目生效 - 如果之前设过其他镜像,该命令会覆盖
repo.packagist字段,无需手动删旧配置 - 不建议用
composer create-project时加-vvv看是否生效——直接跑composer install观察下载域名是否变成镜像地址更可靠
为什么有时候切了镜像 still 慢?
常见但容易被忽略的几个点:
立即学习“PHP免费学习笔记(深入)”;
-
composer.lock文件里记录的是原始包的 hash 和 dist URL,即使换了镜像,Composer 仍会尝试从 lock 中记录的原始 URL 下载——必须删掉vendor/和composer.lock,再跑composer install才能走新镜像 - 某些包(尤其是私有包或 GitHub 直链包)不走 Packagist,镜像源对其无效;这类包需单独配置
repositories或用platform模拟扩展 - PHP 版本不匹配导致 fallback 到源码安装(
source),而国内镜像通常只同步dist归档;确认composer show --platform和php -v一致可规避 - 部分企业网络会劫持 HTTPS 请求,表现为证书错误或 302 跳转失败;此时可临时加
-vvv查看实际请求 URL 和响应状态码
需要临时禁用镜像怎么办?
不是所有场景都适合镜像——比如调试某个包的最新 dev 分支,或验证上游修复是否生效,就得回退到官方源。
最安全的做法是临时覆盖,不改全局配置:composer install --repository=https://packagist.org
或者临时清空镜像设置(仅本次命令):composer install --no-plugins --repository=packagist
-
--repository=packagist表示使用官方默认源,忽略所有自定义配置 - 别用
composer config -g --unset repo.packagist,这会破坏全局配置结构,下次设镜像可能出错 - CI 环境中建议显式传
--repository,避免依赖开发者本地配置
镜像不是万能加速器,它只解决 Packagist 生态分发层的问题。真正的瓶颈有时在 autoload 生成、opcache 预热或依赖图本身太深——但至少让 composer install 不再卡在第一分钟。



















