直接删 vendor/ 并清缓存并非万能,但对多数“corrupted package”最有效;需先区分缓存损坏、zip截断或 composer.lock 与实际内容不一致。

直接删 vendor/ 并清缓存,不是万能解法,但对绝大多数 "corrupted package" 报错最有效;关键得先分清是缓存损坏、ZIP 截断,还是 composer.lock 与实际内容不一致。
Failed to extract vendor/package:ZIP 下载不完整或校验失败
这是最典型的“损坏”现象,错误如 Failed to extract vendor/symfony/console: unable to open archive 或 Content-Length mismatch。Composer 下载 ZIP 后会校验 SHA256,一旦失败就拒绝解压,且不会自动重试已损坏的缓存文件。
- 运行
composer clear-cache,强制清除~/.composer/cache/files/下所有压缩包 - 加
--no-cache参数重装:composer install --no-cache,跳过本地缓存,从镜像源重新拉取 - 若仍卡在同一个包,进缓存目录手动删掉对应 ZIP:
rm -rf ~/.composer/cache/files/vendor/package(Linux/macOS) - 别用
composer update强刷——它可能 fallback 到 source(git clone),反而暴露凭据或网络问题
composer.lock 与 vendor 内容哈希不匹配
现象是 composer install 静默跳过、没报错,但运行时类找不到或行为异常;或者 composer install --dry-run 显示反复尝试下载已存在的包。本质是 composer.lock 记的 dist.sha256 和 vendor/ 里真实文件算出的哈希对不上。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先备份当前
vendor/和composer.lock - 运行
composer update --lock:它只重写composer.lock中的哈希和 size 字段,不改动任何已安装包,也不重算依赖 - 如果某包提示
dist not found,说明该版本在镜像源中已被移除,需查composer show vendor/package确认可用版本 - 切勿直接删
composer.lock——这会让 Composer 重解整个依赖图,可能引入未测试的子依赖组合
vendor 目录有未提交修改导致中止
错误信息类似 There are uncommitted changes in vendor/package。这不是文件损坏,而是 Composer 的保护机制:它把 vendor/ 当作只读快照,不允许手改。
- 不要
rm -rf vendor/,那会丢掉 autoload 缓存结构,下次安装更慢 - 用
composer install --discard-changes,按composer.lock精准还原每个包,保留目录结构和自动加载映射 -
composer update --discard-changes会先更新再丢弃,会改composer.lock,慎用 - 这种中止不会触发脚本(
post-install-cmd),所以加--no-scripts没意义
autoload.php 缺失或 require 失败
报 failed to open stream: No such file or directory 或 Class not found,90% 不是 Composer 损坏,而是路径或环境问题。
- 确认当前工作目录是项目根目录(含
composer.json),否则require 'vendor/autoload.php'是相对路径查找 - 别复制
vendor/目录到其他项目——vendor/composer/autoload_*.php里写死了绝对路径映射 - 运行
composer dump-autoload重建自动加载规则,比删vendor/更快更轻量 - 如果
vendor/autoload.php物理文件不存在,说明composer install根本没成功执行完,得回溯前面三步
真正难定位的是缓存损坏 + 镜像源元数据过期叠加的情况:composer install 看似成功,但某个包的 ZIP 实际是半截,而 Composer 在解压前才校验,此时错误会延迟暴露。所以换镜像后务必 composer clear-cache,否则它还在用旧镜像的 packages.json 快照找包。










