直接重试无效,因composer不跳过损坏缓存或截断文件;--retries仅对dist下载生效,且依赖http.timeout设置,旧版本忽略该参数,git克隆等环节完全不重试。

直接重试 composer install 通常无效——它不会自动跳过已损坏的缓存或截断的 installed.json,反而可能反复卡在同一个失败点。
为什么 --retries 参数经常没用?
这个参数只在 Composer 2.2+ 生效,且仅作用于 dist 包(ZIP/TAR)下载阶段;对 Git 克隆、元数据拉取、解压写入等环节完全不生效。更关键的是:--retries=5 不会延长单次请求等待时间,如果 http.timeout 还是默认 60 秒,首字节没回来就直接报 cURL error 28,重试五次也全是秒败。
-
--retries控制“重试轮数”,http.timeout才决定“每轮最多等多久” - 旧版本(如 2.1.x)会静默忽略该参数,实际仍是默认 3 次
- 若项目启用了
"prefer-source": true或含私有 Git 仓库,--retries彻底失效
真正有效的重试流程:先清再跑
Composer 没有断点续传,中断后残留状态不可信。能否重试成功,取决于 vendor 和缓存里有没有损坏文件。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 运行
composer install --dry-run:如果大量显示Skipped,说明状态基本完整,可直接重试 - 如果输出以
Installing开头或直接报错(如Invalid argument supplied for foreach()),必须清理 - 执行
rm -rf vendor/ composer.lock(Linux/macOS)或rd /s /q vendor && del composer.lock(Windows) - 再加
--prefer-dist --no-scripts --no-plugins降低失败面
让重试变稳定的 shell 封装技巧
靠人手重试容易漏步骤,用 shell 把清理 + 配置 + 重试打包成确定性操作:
- 每次失败都强制清缓存:
composer clear-cache - 设置合理超时:
composer config -g http.timeout 600 && composer config -g process-timeout 1200 - 加指数退避:
for i in {1..3}; do composer install --prefer-dist && break || sleep $((i * 10)); done - CI 环境中务必挂载
$HOME/.composer/cache,否则每次都是裸奔重下
最常被忽略的点:项目级 repositories 字段会完全屏蔽全局镜像配置,哪怕你 composer config -g repo.packagist 写得再对,只要 composer.json 里有 "repositories" 数组,它就优先读那个——检查用 composer config repositories,空才安全。










