重试 composer install 在多数瞬时故障(如网络抖动、DNS超时)下有效,前提是 composer.lock 完整且 vendor/ 中包已成功解压;但 ZIP 损坏、installed.json 截断或缓存污染时必须清理 vendor 和缓存后重装。

Composer 本身不支持断点续传,中断后重试是否有效,取决于失败类型和残留状态——多数情况下直接重试可行,但 zip 损坏、installed.json 截断、缓存污染时必须清理再装。
重试 composer install 什么时候管用?
Composer 的安装流程是分阶段的:先拉元数据、再下载 dist ZIP、校验 SHA256、解压到 vendor/、最后写 vendor/composer/installed.json。只要这些步骤中前几项成功完成,中断后重跑命令会跳过已解压包,只继续处理失败或未开始的部分。
- 网络短暂抖动、DNS 超时、TLS 握手失败等瞬时问题,重试通常立即恢复
-
composer.lock已存在且未被修改,是重试能“接上”的前提 - 如果某包已完整解压进
vendor/package-name,Composer 不会重复下载或解压 - 注意:重试不会跳过脚本(
post-install-cmd)和插件执行,若它们失败,需加--no-scripts --no-plugins
哪些错误重试完全无效?必须手动清理
一旦 ZIP 下载不完整、校验失败或 installed.json 写入中断,Composer 就无法信任当前状态,此时硬重试只会反复报错。
-
Failed to extract vendor/package-name: unable to open archive→ ZIP 损坏 -
Invalid argument supplied for foreach()→vendor/composer/installed.json被截断 -
The zip extension and unzip command are both missing→ 实际是上一步 ZIP 损坏,后续解压失败 -
Content-Length mismatch→ 缓存里存了半截 ZIP,重试只会复用坏文件
遇到以上任一情况,请按顺序执行:
1. rm -rf vendor/(Windows 用 rmdir /s vendor)
2. composer clear-cache
3. composer install
换镜像源比调任何参数都治本
国内用户 80% 的中断问题根源是直连 packagist.org 或 GitHub API 失败,不是 Composer 逻辑问题。换阿里云或腾讯云镜像后,--retry=3 和 --prefer-dist 才真正起效。
- 全局配置阿里云镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 临时禁用插件与脚本(尤其 CI 环境):
composer install --no-plugins --no-scripts --prefer-dist - 确认镜像生效:
composer config -g repo.packagist应返回镜像 URL,不是packagist.org - 若仍卡在某个包,检查该包是否为私有仓库——镜像源默认不代理私有源,需单独配
repositories
低带宽或反复失败时的手动干预路径
当自动方案持续失效,可绕过 Composer 下载器,用系统工具预置 ZIP 包到缓存目录,让它“以为”已经下好了。
- 从
composer.lock中找到目标包的dist.url和dist.shasum - 用
wget -c手动下载(-O ~/.composer/cache/files/vendor/name/ .zip -c支持续传) - 确保文件名严格匹配哈希值,且路径层级为
~/.composer/cache/files/vendor/name/xxx.zip - 运行
composer install --no-plugins --no-scripts,Composer 会跳过下载,直接解压校验
这个流程麻烦但可靠,特别适合 CI 构建机或企业内网环境;日常开发优先走换源 + 清缓存组合,别花时间折腾手动下载——真正卡住的往往不是下载本身,而是 DNS 解析、CA 证书过期或 PHP curl 扩展配置异常。











