删vendor不够是因为损坏zip仍存于缓存,必须同步执行composer clear-cache;否则composer复用坏包导致错误复现。

为什么删 vendor 不够,还得清缓存
中断后只删 vendor 目录,composer install 很可能立刻复现 Corrupted zip file 或 Content-Length mismatch 错误。这是因为损坏的 ZIP 包还躺在 ~/.composer/cache/files/ 里,Composer 默认会复用它,而不是重新下载。
必须连带执行 composer clear-cache,否则等于把病灶从 vendor/ 转移到缓存层,重装只是更快地失败一次。
-
rm -rf vendor(Linux/macOS)或rmdir /s vendor(Windows) composer clear-cache- 再跑
composer install,别加--no-plugins或--no-scripts以外的参数——先让基础依赖跑通
怎么确认镜像源真生效了
很多人配了阿里云镜像却仍卡在 downloading provider-*.json,不是配置没写对,就是根本没走镜像。运行这条命令看真实生效地址:
composer config --global repo.packagist
输出必须是完整 URL,且末尾有斜杠:https://mirrors.aliyun.com/composer/ ✅;少斜杠或拼错域名(比如 composer.com)都会导致 404,Composer 自动 fallback 到官方源。
- 验证镜像可用性:直接
curl -I https://mirrors.aliyun.com/composer/,应返回HTTP/2 200 - 如果返回超时或
503,换腾讯云镜像:composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/ - 私有包不走镜像——若报错集中在某个内部包,检查
composer.json的repositories是否单独声明了该源
哪些错误说明必须清理,不能硬重试
以下错误不是网络抖动,而是状态已损坏,重试只会循环报错:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
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 已损坏,解压器只是“背锅” - 进度条卡在同一个百分比超过 2 分钟,且
-vvv显示刚下载完就校验失败
遇到任一情况,别等、别改配置、别手动补文件——直接走清理三步:删 vendor、清缓存、重装。
临时稳住安装的实用参数组合
网络差时,--prefer-dist 比调超时更有效:它强制走 ZIP 包而非 git clone,体积小、校验快、失败率低。而 --no-plugins 能绕过旧版插件(如 hirak/prestissimo)引发的并发崩溃。
CI 环境或本地弱网下推荐这一行:
composer install --no-plugins --no-scripts --prefer-dist
-
--no-scripts跳过 post-install-cmd,避免脚本失败阻塞安装 - 不建议加
--retry=3—— 它只对瞬时 DNS 或 TLS 失败有效,对 ZIP 损坏完全无效 - 别碰
process-timeout配置:它控制的是 Composer 进程执行时间,不是下载超时;真正影响下载的是 cURL 层,靠换镜像解决更直接
最常被忽略的一点:composer.lock 文件本身不能是旧版生成的。如果它由 Composer 2.2 以前版本产出,又用了新版镜像元数据,解析阶段就可能失败——此时连清理都没用,得先 composer update --lock(确保环境干净)再重来。










