必须同步删除 vendor/ 和 composer.lock 并执行 composer install --no-cache --force-checksums,因校验失败源于 composer.lock 中硬编码的 dist.sha256 与损坏缓存 zip 不匹配,仅清缓存或删 vendor 无效。

直接删整个 vendor/ 不解决问题,必须同步清理缓存 + 锁文件 + 强制校验
报错“Failed to extract”或“corrupted archive”不是网络问题
错误本质是 ~/.composer/cache/files/ 下某个 ZIP 文件损坏(比如下载中断、磁盘写异常),Composer 拿它去解压时失败。它不会自动跳过或重试,卡在那个包就停住。
- 别急着换镜像源——所有镜像都用同一份
dist.sha256校验,换源不解决已缓存的坏 ZIP -
composer clear-cache有用,但只清缓存;rm -rf vendor单独执行也没用,因为composer.lock里还记着旧哈希,重装时仍拿坏包去比对 - Windows 用户注意:
rd /s /q vendor & del composer.lock必须一起执行,漏掉composer.lock就白删
必须同步删掉 vendor/ 和 composer.lock
校验失败根源在 composer.lock 中硬编码的 dist.sha256 值。它和当前下载包不匹配,Composer 就拒绝安装。只清缓存、只删 vendor/ 都绕不过这个检查。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先备份:
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/
确认镜像配置真生效,URL 末尾必须带 /
很多人以为 composer config -g repo.packagist https://mirrors.aliyun.com/composer 就设好了,其实没生效。少一个斜杠,拼出的 URL 是 https://mirrors.aliyun.com/composer/packages.json → 404,Composer 静默回退到 packagist.org。
- 验证命令:
composer config -g repo.packagist,输出必须是{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}(注意末尾/) - 项目级
composer.json里若写了"repositories"字段,会直接覆盖全局镜像配置 - CI 环境中,配置命令必须显式写在 workflow 步骤里,不能只在本地跑过
缓存目录权限错位是 CI 构建失败的隐藏元凶
CI runner 以非 root 用户运行,但之前有人用 sudo composer 写过配置,导致 ~/.composer/cache 属主变成 root。普通用户执行 composer clear-cache 会 Permission denied,命令看似成功实则没删成。
- 查路径:
composer config --global cache-dir - 查属主:
ls -ld $(composer config --global cache-dir) - 修复权限:
sudo chown -R $USER:$(id -gn) $(composer config --global cache-dir) - 流水线中禁用 vendor 缓存:只缓存
~/.composer/cache,不要缓存vendor/—— 不同 PHP 版本、扩展开关状态生成的 autoloader 不能混用
最常被忽略的是 --force-checksums 这个参数:它不是可选项,而是必须显式带上才能让 Composer 在校验失败时立即中断,避免把损坏 ZIP 解压进 vendor/ 导致后续报 Class not found 或 Cannot declare class。每次重装都要加,CI 脚本里别漏。










