Composer怎么设置超时时间 process-timeout参数配置教程【方法】

7次阅读

process-timeout 是 composer 限制 git clone 等外部命令执行时间的配置项,默认300秒;网速慢或仓库响应迟缓时易超时中断,可全局、项目级或临时设为1800秒等值,但需注意其仅控制子进程、不作用于 autoload 生成。

Composer怎么设置超时时间 process-timeout参数配置教程【方法】

process-timeout 是什么,为什么需要改它

process-timeout 是 Composer 用来限制单个外部命令(比如 git clonesvn export解压操作)最长执行时间的配置项,单位是秒。默认值为 300(5 分钟)。在网速慢、包体积大、或 Git 仓库响应迟缓的场景下,很容易触发 ProcessTimedOutException 错误,导致 composer installupdate 中断。

三种改法:全局、项目级、临时生效

process-timeout 不需要动源码或重装 Composer,直接通过配置命令或文件即可:

  • 全局修改(影响所有项目):
    composer config -g process-timeout 1800

    (设为 30 分钟)

  • 项目级修改(只影响当前目录下的 composer.json):
    composer config process-timeout 1800

    ,会写入项目根目录的 composer.jsonconfig

  • 临时覆盖(仅本次命令生效):
    composer install --process-timeout=1800

    COMPOSER_PROCESS_TIMEOUT=1800 composer update

注意:config 命令写入的是整数,不要加引号;若设为 0 表示禁用超时(不推荐,可能卡死)。

常见错误和兼容性提醒

很多人改了没生效,往往是因为:

  • 混淆了 process-timeouttimeout(后者控制 http 请求超时,是另一个独立配置)
  • 在 CI 环境中用了 --no-interaction 却没同步设置 process-timeout,导致拉取私有 Git 包时静默失败
  • windows 下使用 WSL 或 Git for windows 时,git clone 本身可能因 ssh 连接慢而先于 Composer 超时,此时光调大 process-timeout 不够,还得配 git config --global core.sshCommand "ssh -o ConnectTimeout=30"
  • Composer 2.2+ 对 process-timeout 的行为更严格,旧版(1.x)在某些子进程场景下可能忽略该设置

验证是否生效

最直接的方式是查看当前生效值:

composer config process-timeout

或者看完整配置:

composer config --list | grep process-timeout

如果输出为空,说明没设置,走的是默认 300;如果显示 0,代表禁用——这种状态在线上环境要特别小心,尤其搭配私有仓库或低带宽部署时。

真正容易被忽略的是:这个参数只管「子进程」,不管 php 自身执行或 autoloader 生成耗时。遇到卡在 Generating autoload files 阶段,别瞎调 process-timeout,得去看 composer dump-autoload --optimize 或检查 PSR-4 映射是否过大。

text=ZqhQzanResources