Composer 不支持断点续传,中断后临时 ZIP 被删、GitHub token 失效、SHA256 强制全量校验,只能靠缓存复用或手动预置 ZIP 实现“伪续传”;需清理 vendor/、composer.lock 和缓存,并检查项目级 repositories 是否覆盖全局镜像。

Composer 本身不支持断点续传,所谓“同步中断后继续”只是缓存复用 + 状态比对的副作用;中断后 ZIP 临时文件被删、GitHub token 链接失效、SHA256 校验强制全量验证——你没法接着下,只能让 Composer 认为“这个包已经下过了”。
为什么 composer install 中断后不能继续下载 ZIP
底层用的是 cURL 或 PHP stream,既不发 Range 请求,也不记录已下载字节数。一旦中断:
-
vendor/composer/tmp-xxxxx.zip临时文件被自动删除 - GitHub 的
zipballURL 带一次性 token,重试时链接返回内容可能不同,无法局部校验 - Composer 必须校验整个 ZIP 的
sha256,半截文件直接被拒绝,流程终止 - 中文环境下常见 DNS 污染、TLS 握手失败、CDN 返回 502,这些都不是“进度问题”,而是连接链路断裂
真正起作用的“伪续传”:缓存复用 + 手动预置 ZIP
Composer 的“续传感”只来自两件事:缓存目录里已有完整 ZIP,且校验通过;或你手动把 ZIP 放进缓存路径让它跳过下载。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 确认缓存路径:
composer config --global cache-dir,典型路径是~/.composer/cache/files/ - 缓存 ZIP 命名规则:
vendor/name/<code>sha256.zip(sha256来自composer.lock中对应包的dist.shasum字段) - 手动下载 ZIP:从
composer.lock里找到该包的dist.url(如https://api.github.com/repos/laravel/framework/zipball/...),用wget或浏览器下载,重命名为对应sha256,放进缓存目录 - 确保权限可写:
chmod -R u+rw $(composer config --global cache-dir),否则 Composer 会忽略已有文件
镜像同步中断后必须清理的三类状态
很多“重试无效”不是网络问题,而是本地状态已污染。以下错误出现时,--retry 和换镜像都无用,必须清理:
-
Invalid argument supplied for foreach()→vendor/composer/installed.json被截断或为空 -
Content-Length mismatch→ 缓存中 ZIP 文件损坏(只写了一半),校验失败后反复触发相同报错 - 执行
composer install后vendor/autoload.php为空或缺失类映射 → 部分包写入失败,但 Composer 回滚不彻底 - 解决方法统一:删掉
vendor/、composer.lock、运行composer clear-cache,再重新composer install
项目级 repositories 会完全屏蔽全局镜像
即使你配了阿里云镜像,只要项目根目录 composer.json 里有 "repositories" 字段(哪怕值是 {} 或 []),全局配置就失效。
- 检查命令:
composer config --list | grep repo,确认输出中只有你期望的镜像 URL,且repo.packagist显示为false或正确 URL - 若存在项目级
repositories,先删掉整个区块(注意 JSON 语法,保留逗号和缩进) - 再运行
composer clear-cache,然后composer update --lock刷新composer.lock中的 dist URL - 私有包未同步到镜像?必须在
repositories中单独声明其dist地址,否则 fallback 到官方源卡住
最常被忽略的点:缓存目录不可写、磁盘空间满、项目级 repositories 静默覆盖全局配置——这些不会报明确错误,但会让所有“换源”“重试”操作变成无意义的空转。

















