如何设置Composer全局下载超时时间?

2026-04-28 22:573阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计677个文字,预计阅读时间需要3分钟。

如何设置Composer全局下载超时时间?

plaintextComposer 全局超时必须为两个独立配置:

全局设置 http-timeout(解决卡在 Downloading https://)

这是 PHP cURL 层的等待上限,不是 Composer 慢,是底层等不到响应。典型错误包括 Could not fetch https://repo.packagist.org/packages.jsoncurl error 28、反复重试后失败。

  • 全局生效命令:composer config --global http-timeout 600(写入 ~/.composer/config.json
  • 该值控制所有 HTTP 请求:拉取 packages.json、下载 ZIP 包、访问私有源元数据
  • 注意:http-basicgithub-oauth 配置项完全不干预超时,改它们没用
  • PHP 底层也有影响:运行 php -i | grep default_socket_timeout 查 CLI 模式值,若为 60,也会提前中断——可临时绕过:php -d default_socket_timeout=600 $(which composer) install

全局设置 process-timeout(解决卡在 Installing dependencies 或报 The process timed out)

这是子进程(如 git cloneunzipphp artisan optimize)被杀的阈值,和网络无关。错误里一定含 [RuntimeException] The process timed out.Symfony\Component\Process\Exception\ProcessTimedOutException

  • composer config --global process-timeout 1800 在新版 Composer 中已废弃,别信老教程
  • 真正有效的全局方式是环境变量:export COMPOSER_PROCESS_TIMEOUT=1800(Linux/macOS),Windows 下设系统级环境变量
  • 项目级配置仍有效且更安全:composer config process-timeout 1800(写入当前 composer.jsonconfig 段)
  • 设为 0 表示禁用检查,但不推荐——Git 不可达或脚本死循环时会无限卡住

验证是否生效 & 容易踩的坑

运行 composer config http-timeoutcomposer config process-timeout 可查当前值,但要注意:

  • 项目级配置优先级高于全局,若 composer.json 里已有 "process-timeout": 300,全局环境变量也覆盖不了
  • CI 流水线建议用环境变量方式,避免污染全局配置
  • 调高超时只是“延缓失败”,不是根治方案;国内用户应优先换镜像源:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
  • 某些老旧插件(如 hirak/prestissimo)可能干扰子进程调度,导致误判超时

最常被忽略的是 PHP 底层的 default_socket_timeout 和镜像源是否代理 Git 协议——这两处不动,光调 Composer 超时,问题还在原地打转。

标签:Composer

本文共计677个文字,预计阅读时间需要3分钟。

如何设置Composer全局下载超时时间?

plaintextComposer 全局超时必须为两个独立配置:

全局设置 http-timeout(解决卡在 Downloading https://)

这是 PHP cURL 层的等待上限,不是 Composer 慢,是底层等不到响应。典型错误包括 Could not fetch https://repo.packagist.org/packages.jsoncurl error 28、反复重试后失败。

  • 全局生效命令:composer config --global http-timeout 600(写入 ~/.composer/config.json
  • 该值控制所有 HTTP 请求:拉取 packages.json、下载 ZIP 包、访问私有源元数据
  • 注意:http-basicgithub-oauth 配置项完全不干预超时,改它们没用
  • PHP 底层也有影响:运行 php -i | grep default_socket_timeout 查 CLI 模式值,若为 60,也会提前中断——可临时绕过:php -d default_socket_timeout=600 $(which composer) install

全局设置 process-timeout(解决卡在 Installing dependencies 或报 The process timed out)

这是子进程(如 git cloneunzipphp artisan optimize)被杀的阈值,和网络无关。错误里一定含 [RuntimeException] The process timed out.Symfony\Component\Process\Exception\ProcessTimedOutException

  • composer config --global process-timeout 1800 在新版 Composer 中已废弃,别信老教程
  • 真正有效的全局方式是环境变量:export COMPOSER_PROCESS_TIMEOUT=1800(Linux/macOS),Windows 下设系统级环境变量
  • 项目级配置仍有效且更安全:composer config process-timeout 1800(写入当前 composer.jsonconfig 段)
  • 设为 0 表示禁用检查,但不推荐——Git 不可达或脚本死循环时会无限卡住

验证是否生效 & 容易踩的坑

运行 composer config http-timeoutcomposer config process-timeout 可查当前值,但要注意:

  • 项目级配置优先级高于全局,若 composer.json 里已有 "process-timeout": 300,全局环境变量也覆盖不了
  • CI 流水线建议用环境变量方式,避免污染全局配置
  • 调高超时只是“延缓失败”,不是根治方案;国内用户应优先换镜像源:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
  • 某些老旧插件(如 hirak/prestissimo)可能干扰子进程调度,导致误判超时

最常被忽略的是 PHP 底层的 default_socket_timeout 和镜像源是否代理 Git 协议——这两处不动,光调 Composer 超时,问题还在原地打转。

标签:Composer