重试 composer install/update 通常可行,因其分阶段执行且保留临时文件;但 zip 损坏、installed.json 截断等需清理 vendor、清缓存后重试;配国内镜像源更治本。

Composer install/update 半途失败后直接重试就行
Composer 本身没有传统意义的“断点续传”,但它的下载和安装是分阶段、可恢复的:包元数据(composer.lock)已写入,临时文件(vendor/composer/installed.json、vendor/.cache/ 下的归档)大多保留,重跑 composer install 或 composer update 会跳过已成功解压的包,只继续处理失败或未开始的部分。
哪些情况重试无效?得手动清理
常见于网络中断导致 zip 包损坏、校验失败,或 vendor/ 目录结构被部分写入但不完整。此时 Composer 会报类似错误:
The zip extension and unzip command are both missing(其实是上一步 zip 损坏,后续解压失败)Failed to extract vendor/package-name: unable to open archiveInvalid argument supplied for foreach()(vendor/composer/installed.json 被截断)
遇到这些,别硬等重试,按顺序执行:
- 删掉
vendor/目录(rm -rf vendor或rmdir /s vendor) - 删掉
vendor/composer/installed.json(如果vendor/已删,这步自动生效) - 清空 Composer 全局缓存:
composer clear-cache(避免复用损坏的 zip 缓存) - 再运行
composer install
国内用户优先配镜像源,比重试更治本
下载中断八成是因为连不上 packagist.org。换国内镜像不是“锦上添花”,而是解决根本阻塞点:
- 阿里云镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 腾讯云镜像:
composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/
注意:-g 是全局配置;若项目级配置,去掉 -g 并在项目根目录下运行;切换后无需重启终端,下次 install 就生效。
临时网络差?加 –no-plugins 和 –prefer-dist 更稳
插件(如 hirak/prestissimo)在旧版 Composer 中可能加剧并发下载失败;--prefer-dist 强制走压缩包而非 git clone,体积小、校验快、失败率低:
composer install --no-plugins --prefer-distcomposer update --no-plugins --prefer-dist
如果你没装自定义插件,--no-plugins 几乎无副作用;--prefer-dist 在有 dist 包时默认启用,但显式声明能绕过某些仓库的 source fallback 逻辑,避免卡在 git fetch。
真正麻烦的是 vendor 目录权限混乱、磁盘满、或 Composer 版本太老(2.2 且未打补丁)。这些不会靠重试解决,得先看 composer diagnose 输出。