卡在Downloading应调http-basic-timeout(≥2.2)或http.timeout(旧版),控制DNS解析、TLS握手及HTTP传输总时长;卡在Executing command才调process-timeout,控制git clone、unzip等子进程总耗时;两者作用域不同,须依-vvv日志末行精准对应调整。

得先看卡在哪一层,否则改 timeout 等于白等。 Composer 拉取扩展失败时的 “timeout” 不是单一问题,process-timeout 和 http-basic-timeout(或旧版 http.timeout)管的事完全不同,混着调根本没用。
卡在 Downloading https:// 时该调哪个 timeout
这是 HTTP 请求阶段失败,比如拉 packages.json、下载 ZIP 包,错误里常带 cURL error 28 或反复 retry 后中断。它完全不看 process-timeout,只响应 http-basic-timeout(Composer ≥ 2.2)或 http.timeout(v1 或 v2 兼容模式)。
-
http-basic-timeout控制 DNS 解析 + TLS 握手 + 首字节等待 + 整个 body 传输总时长,默认仅 60 秒,国内弱网下极易触发 - 项目级生效:运行
composer config http-basic-timeout 600,写入当前composer.json的config段,可提交、可复现 - 全局生效:用
composer config -g http-basic-timeout 600,写入~/.composer/config.json - 临时覆盖(CI 最稳):设环境变量
COMPOSER_HTTP_BASIC_TIMEOUT=1200再执行命令 - ⚠️ 注意:
php -i | grep default_socket_timeout查出的 PHP CLIdefault_socket_timeout若低于你设的值(常见是 60),会提前掐断连接——必须同步调高
卡在 Executing command (CWD: ...) 时该调哪个 timeout
这是子进程卡死,比如 git clone、unzip、执行 post-install-cmd 脚本,报错一定含 [RuntimeException] The process "" exceeded the timeout。这时才轮到 process-timeout 起作用。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
-
process-timeout控制整个命令生命周期上限(含依赖解析、解压、脚本执行、autoload 生成),默认 300 秒,大型项目或私有包频繁 checkout 容易超 - 全局改:运行
composer config -g process-timeout 1200 - 项目级改:直接在
composer.json顶层加"config": {"process-timeout": 1200} - 临时覆盖:用
COMPOSER_PROCESS_TIMEOUT=1200 composer install或命令行参数--process-timeout=1200 - 设为 0 表示禁用超时,但可能卡死无响应;调试建议先设 600,确认能走通再调高
为什么换了镜像还超时?三个隐形坑必须清
配了阿里云镜像却仍卡在 Loading composer repositories 或 Downloading,大概率不是 timeout 没调够,而是配置被绕过了。
- 必须执行
composer clear-cache,否则 Composer 可能继续读本地失效缓存 - 检查项目级
composer.json是否硬写了"repositories"—— 它优先级高于全局镜像,会直接忽略config -g设置 - 验证是否真生效:运行
composer config -g repos.packagist,输出应为{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"};若为空或仍是 packagist.org,说明没生效 - 额外注意:镜像地址末尾多一个
/会导致拼出//packages.json报 404;系统代理或杀软 HTTPS 扫描也可能让 TLS 握手静默卡住
最常被忽略的是:卡在 Generating autoload files 后不动,根本不是网络或 timeout 问题,而是文件系统慢(如 WSL2 symlink)、APCu 未启用 CLI 模式,或 memory_limit 不足。这时候调任何 timeout 都没意义。

















