composer install 卡在 downloading 主因是默认连接海外 packagist.org,国内用户面临 dns 慢、建连超时、tls 握手失败及无并发控制等问题;换用清华/阿里/腾讯等支持签名验证的国内镜像源并清缓存可解决。

为什么 composer install 卡在 downloading 包?
不是网络抽风,大概率是默认源走的是 packagist.org 官方服务器,物理距离远、没 CDN、还常被干扰。国内用户直连时 DNS 解析慢、TCP 建连超时、TLS 握手失败都可能触发重试,看着就像“卡住”。更隐蔽的问题是:Composer 会为每个包单独发起请求,没并发控制,小包多时 IO 等待明显。
- 换国内镜像源是最直接有效的解法,优先用清华、阿里或腾讯的镜像
- 镜像必须支持 Composer 2.x 的
packages.json结构和签名验证(如<a href="https://www.php.cn/link/1569ae888190eb8c53b218b0d529e1e9">https://www.php.cn/link/1569ae888190eb8c53b218b0d529e1e9</a>) - 切源前先清缓存:
composer clear-cache,否则旧包仍可能从原源拉取
怎么安全切换到国内镜像源?
切源不是改个 URL 就完事,得兼顾安全性与兼容性。Composer 1.10+ 和 2.x 对镜像签名要求不同,随意配错会导致 Signature mismatch 错误。
- 全局设置(推荐):
composer config -g repo.packagist composer <a href="https://www.php.cn/link/16f26d49cfe75d6731a310494bf56f7d">https://www.php.cn/link/16f26d49cfe75d6731a310494bf56f7d</a> - 项目级设置(更可控):
composer config repo.packagist composer <a href="https://www.php.cn/link/aad92567225d700b4408b63e7fe0f9c8">https://www.php.cn/link/aad92567225d700b4408b63e7fe0f9c8</a> - 不要用
composer config -g packagist.org false这类禁用操作,会破坏私有包解析逻辑 - 切换后运行
composer show -p确认源地址已更新,且不报Invalid repository type
composer install 还慢?关掉这些默认行为
镜像只是第一步。Composer 默认行为里藏着不少“减速带”:验证签名、加载插件、扫描 autoload、甚至写日志都会拖慢安装。
- 关闭插件自动加载:
composer install --no-plugins(尤其避免hirak/prestissimo这类过时加速插件,它在 Composer 2.x 中已失效甚至冲突) - 跳过 autoload 生成(如果确定不需要):
composer install --no-autoloader - 禁用进度条和彩色输出(减少终端 IO):
composer install --no-ansi --quiet - 不要加
--verbose或-v,调试时再开,日常 CI 构建务必去掉
CI 环境下反复 install?用好 vendor 缓存和 lock 文件
在 GitHub Actions / GitLab CI 里每次从头 composer install 是最大浪费。根本问题不在网络,而在没复用已有依赖树。
- 必须提交
composer.lock,且确保 CI 使用的 PHP 版本与本地一致(platform.php配置会影响包版本选择) - CI 中优先恢复
vendor/缓存(如 GitHub Actions 的actions/cache),key 建议含:composer.lock的 hash + PHP version + Composer version - 如果项目含大量 dev-only 包,CI 可用
composer install --no-dev --optimize-autoloader,跳过测试相关依赖并生成静态映射
镜像源只是入口,真正影响速度的往往是 lock 文件是否稳定、vendor 是否复用、以及你有没有在不该验证的时候硬要验证。一个没被注意到的 composer.json 里写了 "minimum-stability": "dev",就足以让 Composer 放弃所有缓存,重新遍历整个分支历史。










