--retries=5常无效,因仅composer 2.2+支持且仅作用于dist包下载,对git clone无效;每次重试仍受默认http.timeout=60限制,旧版更静默忽略。

为什么--retries=5经常没用
这个参数只在 Composer 2.2+ 生效,且仅作用于 dist 包(.zip/.tar)下载阶段;对 git clone 完全无效。更关键的是它不延长单次请求等待时间——重试 5 次,但每次仍卡在默认 http.timeout=60 就失败。旧版本(如 2.1.x)会静默忽略该参数,实际仍是默认 3 次。
http.timeout 和 process-timeout 到底谁该调
这两个参数控制完全不同的阶段,混用等于白等:
-
http.timeout:控制单次 HTTP 请求(DNS 解析、TLS 握手、首字节等待、body 传输)上限,默认仅 60 秒。下载大包或镜像首字节延迟高时最先触发失败,建议设为300~600 -
process-timeout:控制整个composer install命令从开始到结束的总耗时上限,默认 300 秒。包含解压、运行脚本、生成 autoload 等全部步骤,大项目建议设为1200 - 注意:
http-basic.timeout是 v1 废弃项,v2 完全不读取
卡在 “Loading composer repositories” 怎么办
这不是下载慢,是 Composer 在等镜像源返回 packages.json 元数据。默认单源等待 30 秒才切下一个,而 DNS 解析慢、TLS 握手卡、IPv6 fallback 都会拖满这 30 秒。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 临时缓解:运行
composer config -g http.timeout 600 - 更治本:加环境变量
COMPOSER_IPV4=1,强制走 IPv4,绕过 IPv6 探测延迟 - 别信“多加几个镜像源就能快”:Composer 不会在超时/502/证书错误时 fallback,只在 404(包不存在)时才试下一个
重试失败后要不要清理缓存和 vendor
取决于中断阶段——不是看重试几次,而是看残留了什么:
- 元数据拉取(如
packages.json)失败:重试几乎总能过,没写任何临时文件 - ZIP 下载中止:临时 ZIP 被自动删除,重试 = 重新下载整个包
- 解压或写入
vendor/composer/installed.json卡住:文件可能截断,后续报Invalid argument supplied for foreach()或Failed to extract,必须清理 - 最快判断方式:运行
composer install --dry-run。如果大量显示Skipped,说明状态可信;若只显示Installing或直接报错,就得清掉再跑
真正稳的方案不是依赖 Composer 自身重试,而是用 shell 封装:每次失败都 rm -rf vendor/ composer.lock,加 --prefer-dist 强制走 dist 包,再配合指数退避 sleep $((i * 10)) 给网络恢复留出时间。残留损坏文件比网络慢更致命。










