composer 下载卡住或报 process-timeout 错误需修改 process-timeout 配置而非仅换镜像;默认 300 秒限制的是 git clone、解压等子进程执行时间,设为 0 可禁用超时,但 ci 环境推荐设为 1800 等具体值以避免无限等待。

Composer 下载卡住或报 process-timeout 错误怎么办
直接改配置,不是重试或换镜像就能解决的。Composer 默认的 process-timeout 是 300 秒(5 分钟),但某些包(比如含大量二进制或需编译的扩展)下载 + 解压 + 安装可能远超这个时间,就会被强制中断,报错类似:Process timeout exceeded 或 The process "git clone ..." exceeded the timeout of 300 seconds。
关键不是“网络慢”,而是 Composer 在执行命令(如 git clone、unzip、composer install --no-interaction)时,对单个子进程设了硬性超时限制。
- 全局修改:运行
composer config -g process-timeout 0(设为 0 表示禁用超时) - 项目级修改:在项目根目录下运行
composer config process-timeout 0(写入当前项目的composer.json的config段) - 临时生效:加环境变量启动,如
COMPOSER_PROCESS_TIMEOUT=0 composer install
为什么不能只靠 timeout 或镜像加速
很多人试过换阿里云/腾讯云镜像、加 -vvv 调试、甚至反复 composer clear-cache,但问题依旧——因为这些操作影响的是 HTTP 下载阶段,而 process-timeout 控制的是后续 shell 命令执行阶段(比如解压 zip、运行 post-install-cmd 脚本、生成 autoload 文件等)。
-
timeout配置(HTTP 层)和process-timeout(进程层)是两套机制,互不覆盖 - 镜像只加速
packagist.org元数据和 dist 包下载,不影响git clone或本地脚本执行耗时 - 某些私有包或 dev 分支依赖会触发
git clone --recursive,遇到大仓库极易超时,这时只有调高process-timeout有效
process-timeout = 0 安全吗?有没有副作用
设为 0 不会“让 Composer 永远卡住”,只是取消单个子进程的自动终止;Composer 本身仍有信号捕获(如 Ctrl+C)和内部逻辑兜底(比如重复失败会报错退出)。真正风险在于掩盖真实问题:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 如果某次
git clone真的卡死(比如 SSH 密钥错误、防火墙拦截),设为 0 会让命令挂起更久,排查反而更难 - CI 环境中建议设具体值(如
1800,30 分钟),而非0,避免构建无限等待 - PHP 内存限制(
memory_limit)和 Composer 的memory-limit配置仍生效,不会因process-timeout=0而绕过
CI/CD 中推荐的稳定写法
在 GitHub Actions、GitLab CI 等场景下,别依赖全局配置——每次 job 都是干净环境。最稳妥的做法是在命令前显式传参:
COMPOSER_PROCESS_TIMEOUT=1800 composer install --no-interaction --prefer-dist
或者在 composer.json 里固定配置(适合团队统一策略):
"config": {
"process-timeout": 1800,
"fxp-asset": {"enabled": false}
}
注意:如果项目用了 fxp/composer-asset-plugin(老版 Yii2 项目常见),它自身也有独立超时逻辑,process-timeout 对它无效,得单独处理。
超时问题本质是任务边界没对齐:你认为“下载完成”就该算成功,但 Composer 认为“所有钩子执行完才算”。这点容易被忽略,一卡就是半小时没反应。










