timeout 参数在 composer.json 中无效,真正生效的是命令行 --timeout 参数,仅作用于 update、install 和 require 的 http(s) 请求阶段,单位为秒且支持小数,默认 300 秒。

timeout 参数在 composer.json 里根本不起作用
很多人以为在 composer.json 的 "config" 下写 "process-timeout": 300 或 "timeout": 600 就能控制网络请求超时,其实这是错的。Composer 的 process-timeout 只管命令执行(比如脚本、install 脚本),不管 HTTP 下载;而 timeout 根本不是 Composer 官方支持的 config 项,设了也白设。
真正生效的是 http-proxy 和 ca-bundle 配置之外的 --timeout 命令行参数
Composer 使用的是 composer/composer 内部封装的 GuzzleHttp\Client,其底层超时由 --timeout 控制,且仅对 update 和 install 生效(require 也会继承)。这个值单位是秒,最小支持小数(如 1.5)。
- 默认值是
300(5 分钟),但弱网下经常不够用 - 设太高会掩盖真实失败(比如包源彻底不可达),设太低又容易误判为超时
- 它只影响 HTTP(S) 请求阶段,不影响解压、autoload 生成等后续步骤
示例:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
composer update --timeout=600
动态设置 timeout 需要自己判断网络状况再调用命令
Composer 没有内置“自动测速+自适应 timeout”的逻辑,必须外部介入。常见做法是先 ping 或 curl 包源(如 packagist.org),根据响应时间决定传什么 --timeout 值。
- 用
curl -o /dev/null -s -w "%{time_total}\n" https://packagist.org/packages.json -m 5测首包延迟,>2s 建议设--timeout=900,300 - 注意:国内用户直连
packagist.org多数超时,应优先检测镜像源(如https://packagist.phpcomposer.com或https://mirrors.aliyun.com/composer/) - 别用
ping判断——ICMP 不代表 HTTPS 可通,且很多 CDN 屏蔽 ping - 脚本中建议加
||fallback,比如测速失败就用保守值1200
全局配置无法动态生效,alias 或 wrapper 脚本是唯一实用方案
想让所有 composer update 自动带 timeout,不能靠 composer config,得靠 shell 层面干预。
- bash/zsh 中可定义 alias:
alias composer-update='curl -o /dev/null -s -w "%{time_total}" https://mirrors.aliyun.com/composer/packages.json -m 3 2>/dev/null | awk "{if (\$1 > 1.5) print \"--timeout=900\"; else print \"--timeout=300\"}" | xargs -I{} composer update {}' - 更稳的方式是写个
~/bin/composerwrapper,对update/install子命令做超时注入,其他命令透传 - 注意:CI 环境(如 GitHub Actions)通常网络稳定,应固定设
--timeout=600并禁用动态逻辑,避免引入不确定性
实际最常被忽略的一点:Composer 的 --timeout 不控制 DNS 查询时间,如果本地 DNS 慢或污染,整个请求会在解析阶段卡住,此时需要额外配置 composer config -g repositories.packagist.org.type composer + 指定镜像 URL 来绕过 DNS 依赖。










