failed to extract vendor/xxx 是本地缓存 zip 文件下载不完整所致,需根据错误路径定位对应包(如 symfony/console),手动删除 ~/.composer/cache/files/ 下匹配的 zip 文件,再执行 composer install --no-cache --force-checksums 重装。

Failed to extract vendor/xxx 是缓存 ZIP 损坏,不是代码问题
报错里带 Failed to extract vendor/symfony/console 或 Corrupted zip file: vendor/monolog/monolog,基本可断定是本地缓存的 ZIP 文件下载不完整,不是 PHP 环境、autoload 配置或网络抖动的问题。Composer 会复用已缓存的 ZIP,哪怕它校验失败也照解压,导致 vendor/ 下目录为空或只有 composer.json 没 PHP 文件。
- 立刻停用
composer install盲重试——它会反复拉坏包 - 盯住错误行末尾的路径,比如
vendor/symfony/console,这就是损坏包的命名线索 - 别删整个
vendor/:90% 场景只坏一个包,清掉对应缓存 ZIP 就够了
手动定位并删除损坏 ZIP 的具体步骤
Composer 不会自动覆盖损坏缓存,必须人工清理,否则重装仍用旧坏包。先查缓存位置:composer config cache-dir(通常是 ~/.composer/cache/files/),再进该目录操作:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Linux/macOS:用模糊匹配找文件,
ls -l symfony/console-*.zip或find . -name "*monolog*zip" - Windows(PowerShell):
Remove-Item "$env:APPDATA\Composer\Cache\Files\symfony\console-*.zip"(版本号要对得上) - 删完后立刻验证:
ls -l ~/.composer/cache/files/symfony/console-*.zip应无输出
重装时必须加 --no-cache 和 --force-checksums
光删 ZIP 不够,还得让 Composer 强制跳过缓存、且在校验失败时立刻退出,避免再次污染 vendor/:
- 用
composer install --no-cache --force-checksums,不是update——install严格按composer.lock还原,不触发依赖重算 -
--no-cache跳过~/.composer/cache/files/,防止捞到残留坏包 -
--force-checksums让校验失败时直接报错退出,不尝试解压损坏 ZIP(这个参数不会被配置继承,每次都要显式带上) - 如果仍失败,说明缓存目录权限错位:运行
ls -ld $(composer config --global cache-dir),若 owner 是root,执行sudo chown -R $USER:$USER $(composer config --global cache-dir)
CI/CD 流水线里更得绕过缓存干扰
在 GitHub Actions、GitLab CI 等环境里,composer clear-cache 常无效——缓存路径可能挂载为持久卷,且 runner 用户和配置用户不一致。最稳做法是彻底禁用缓存:
- 设环境变量:
COMPOSER_CACHE_DIR=/dev/null composer install --no-cache --prefer-dist - 务必在
install前加rm -rf vendor/,尤其当 CI 曾缓存过vendor/——不同 PHP 版本或扩展状态生成的 autoloader 不能混用 - 检查
composer config -g repo.packagist输出是否为完整 JSON,URL 末尾必须带/,否则静默 fallback 到官方源
vendor/symfony/console)就是唯一可靠线索,所有操作都该从它出发,而不是一上来就删 vendor/ 或换镜像**。










