Composer项目级超时必须分层配置:卡在Downloading时调http.timeout(控制单次HTTP请求,默认60秒,建议设600),卡在Executing command时调process-timeout(控制总耗时,默认300秒,建议设1200),两者缺一不可。

Composer 项目级 timeout 必须分两层设,http.timeout 和 process-timeout 缺一不可——前者管单次 HTTP 请求(如拉包、读 packages.json),后者管整个命令生命周期(含 git clone、解压、执行脚本)。只改一个,大概率还是超时。
项目级配置 http.timeout 控制下载卡顿
当 composer install 卡在 Downloading https://... 或报 cURL error 28,说明是 HTTP 层卡住。此时 process-timeout 完全不生效。
-
http.timeout默认仅 60 秒(Composer 2.x),弱网或大 dist 包极易触发;建议设为600 - 写入当前项目:
composer config http.timeout 600,会自动加到composer.json的"config"段,可提交、可复现 - 注意:PHP CLI 的
default_socket_timeout(查法:php -i | grep default_socket_timeout)必须 ≥ 你设的http.timeout,否则 PHP 底层先掐断连接
项目级配置 process-timeout 控制总耗时
当错误里明确出现 The process "xxx" exceeded the timeout,或卡在 Executing command (CWD: )(比如 git clone、unzip、post-install-cmd),就是 process-timeout 在起作用。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 默认 300 秒,大项目跑脚本或 CI 环境很容易不够;推荐设为
1200(20 分钟) - 写入当前项目:
composer config process-timeout 1200,同样进composer.json的"config" - 若项目含自定义脚本(如
post-build),且脚本本身是 PHP 写的,还得额外确保 PHP 的max_execution_time足够(php -d max_execution_time=0 composer run-script xxx)
临时覆盖优先级最高:环境变量和命令行参数
CI/CD 或调试时,用环境变量或命令行参数最灵活,它们优先级高于 composer.json 配置。
- HTTP 层临时调高:
COMPOSER_HTTP_TIMEOUT=1200 composer install - 进程层临时调高:
COMPOSER_PROCESS_TIMEOUT=1800 composer update - 命令行参数(Composer 2.2+):
composer install --timeout=1200 --http-basic-timeout=300(注意等号不能省) - 旧版本不支持
--http-basic-timeout,只能靠换镜像 +--timeout硬扛
真正麻烦的不是“怎么设”,而是“设了没用”——比如 DNS 解析失败、私有 VCS 仓库地址写死、WSL2 下 symlink 扫描慢、或 memory_limit 不足导致 OOM 假性超时。先跑 composer install -vvv 看最后一行停在哪,再决定动哪个参数。

















