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

process-timeout 是什么,为什么需要改它
process-timeout 是 Composer 用来限制单个外部命令(比如 git clone、svn export 或解压操作)最长执行时间的配置项,单位是秒。默认值为 300(5 分钟)。在网速慢、包体积大、或 Git 仓库响应迟缓的场景下,很容易触发 ProcessTimedOutException 错误,导致 composer install 或 update 中断。
三种改法:全局、项目级、临时生效
改 process-timeout 不需要动源码或重装 Composer,直接通过配置命令或文件即可:
- 全局修改(影响所有项目):
composer config -g process-timeout 1800
(设为 30 分钟) - 项目级修改(只影响当前目录下的
composer.json):composer config process-timeout 1800
,会写入项目根目录的composer.json的config段 - 临时覆盖(仅本次命令生效):
composer install --process-timeout=1800
或COMPOSER_PROCESS_TIMEOUT=1800 composer update
注意:config 命令写入的是整数,不要加引号;若设为 0 表示禁用超时(不推荐,可能卡死)。
常见错误和兼容性提醒
很多人改了没生效,往往是因为:
- 混淆了
process-timeout和timeout(后者控制 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 映射是否过大。










