直接删除 ~/.composer/cache/files/ 下对应损坏的 zip 文件最有效,因为 composer clear-cache 会清空全部缓存但 composer 仍可能复用已损坏的 zip 文件导致提取失败。

直接删 ~/.composer/cache/files/ 下对应 ZIP 文件最有效,不是清全量缓存,也不是改镜像。
为什么 composer clear-cache 常常没用?
因为 clear-cache 会删掉 files/、repo/、vcs/ 全部内容,但 Composer 在安装时仍可能复用已损坏的 ZIP —— 它不重新下载,只校验旧哈希值,结果还是报 Failed to extract 或 Corrupted zip file。
常见错误现象包括:
Failed to extract vendor/symfony/consoleCorrupted cache file: monolog/monolog- 执行
composer install -v卡在Extracting后无响应
根本原因不是网络或镜像问题,而是 ~/.composer/cache/files/ 里某个 ZIP 文件损坏(比如下载中断、磁盘写异常),而 Composer 默认不会跳过或重试。
怎么精准定位并删除坏 ZIP?
别删整个 files/ 目录,先找具体包名和版本:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 盯住
composer install -v输出末尾,找Extracting或Downloading后紧跟着的包路径,例如symfony/console - 查缓存位置:
composer config --global cache-dir(Linux/macOS 通常是~/.composer/cache,Windows 是%APPDATA%\Composer\Cache) - 进
files/子目录,按包名模糊搜索 ZIP:ls -l *symfony*console*.zip(Linux/macOS)
PowerShell 中:Get-ChildItem "$env:APPDATA\Composer\Cache\Files" -Recurse -Filter "*console*.zip" - 只删匹配的 ZIP 文件,别碰
repo/和vcs/—— 它们不参与解压流程
删 ZIP 后还报错?检查 composer.lock 和 vendor/
校验失败根源在 composer.lock 中硬编码的 dist.sha256 值。它和当前缓存 ZIP 不匹配,Composer 就拒绝安装。
必须同步操作:
- 备份:
cp composer.lock composer.lock.bak - 删干净:
rm -rf vendor composer.lock(Linux/macOS)或rd /s /q vendor & del composer.lock(Windows) - 重装时加参数:
composer install --no-cache --force-checksums
——--no-cache跳过本地 ZIP,--force-checksums让校验失败立刻退出,不污染vendor/
漏掉 composer.lock 就白删 vendor/;CI 环境中尤其要注意,若 composer.lock 含旧源地址,重装永远走错路。
想释放磁盘空间,但又不想影响下次安装速度?
files/ 是占空间主力,但全删后首次 install 会变慢。更平衡的做法是:
- 只删半年没更新过的 ZIP:
find ~/.composer/cache/files -name "*.zip" -mtime +180 -delete - 保留
repo/(元数据快照),能加速后续update的依赖解析 - 禁用 VCS 缓存(如果不用 Git 拉取):
composer config --global cache-vcs false,避免vcs/占用几百 MB - 设缓存上限(Composer 2.5+):
composer config --global cache-max-size "500M"
真正容易被忽略的是:composer.lock 里的 dist.sha256 和本地 ZIP 的哈希必须严格一致,哪怕只差一个字节,install 就会卡死 —— 这不是 bug,是设计。










