直接删 vendor/ 并清缓存不是万能解法,但对绝大多数“corrupted package”报错最有效;关键需先区分缓存 ZIP 损坏、composer.lock 哈希不匹配或本地源权限问题,再针对性清理缓存文件、重装时加 --no-cache --force-checksums,或运行 composer update --lock 修正哈希,避免误删 composer.lock 或 vendor/ 引发依赖漂移。

直接删 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 文件本身损坏了——校验失败后它不会重试,也不会覆盖旧缓存。
- 先从错误信息里提取包名,比如
symfony/console - 查缓存路径:
composer config cache-dir(通常是~/.composer/cache/files/) - 进该目录,用
ls -l symfony/console-*.zip找到对应版本 ZIP,手动删掉:rm -f ~/.composer/cache/files/symfony/console-5.4.32.zip - 重装时必须加
--no-cache --force-checksums:composer install --no-cache --force-checksums,否则仍可能拉坏包
composer install 静默跳过但运行时报 Class not found
这不是包没装全,而是 composer.lock 里记录的 dist.sha256 和 vendor/ 里实际文件算出的哈希对不上——常见于手动改过 vendor/、跨 PHP 版本复用 vendor/ 或 CI 中缓存了整个 vendor/ 目录。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 别直接删
composer.lock,那会触发全量依赖重算 - 运行
composer update --lock,它只重写composer.lock中的哈希和 size 字段,不动vendor/ - 如果提示
dist not found,说明该版本在镜像源中已被移除,用composer show vendor/package查可用版本再调整 - CI 流水线中务必只缓存
~/.composer/cache,禁用vendor/缓存
file_get_contents(/path/to/my-repo/packages.json): Permission denied
报错含具体路径,说明 Composer 在读本地自定义源(repositories 里 type: "path" 或 "package"),但路径属主不是当前用户——Linux/macOS 下即使权限是 755,只要 owner 不是 $(whoami) 就拒绝访问。
- 执行
ls -ld /path/to/my-repo和ls -ld /path/to/my-repo/packages.json,确认第三列(属主)是否为当前用户 - 若属主是
root或www-data,运行sudo chown -R $USER:$USER /path/to/my-repo - 本地源 URL 必须用绝对路径,避免
"url": "../my-local-package"这类相对路径 - 路径含空格或中文?改用
file:///home/alex/my%20local%20package更稳
真正麻烦的不是 ZIP 损坏,而是缓存目录归属错位、CI 中混用不同 PHP 版本的 vendor/、或者本地源路径被 sudo 污染后所有权混乱——这些情况删 vendor/ 也没用,必须先修正属主和路径语义。

















