如何设置Composer全局下载超时时间?
- 内容介绍
- 文章标签
- 相关推荐
本文共计677个文字,预计阅读时间需要3分钟。
plaintextComposer 全局超时必须为两个独立配置:
全局设置 http-timeout(解决卡在 Downloading https://)
这是 PHP cURL 层的等待上限,不是 Composer 慢,是底层等不到响应。典型错误包括 Could not fetch https://repo.packagist.org/packages.json、curl error 28、反复重试后失败。
- 全局生效命令:
composer config --global http-timeout 600(写入~/.composer/config.json) - 该值控制所有 HTTP 请求:拉取
packages.json、下载 ZIP 包、访问私有源元数据 - 注意:
http-basic和github-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 clone、unzip、php 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.json的config段) - 设为 0 表示禁用检查,但不推荐——Git 不可达或脚本死循环时会无限卡住
验证是否生效 & 容易踩的坑
运行 composer config http-timeout 或 composer 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 超时,问题还在原地打转。
本文共计677个文字,预计阅读时间需要3分钟。
plaintextComposer 全局超时必须为两个独立配置:
全局设置 http-timeout(解决卡在 Downloading https://)
这是 PHP cURL 层的等待上限,不是 Composer 慢,是底层等不到响应。典型错误包括 Could not fetch https://repo.packagist.org/packages.json、curl error 28、反复重试后失败。
- 全局生效命令:
composer config --global http-timeout 600(写入~/.composer/config.json) - 该值控制所有 HTTP 请求:拉取
packages.json、下载 ZIP 包、访问私有源元数据 - 注意:
http-basic和github-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 clone、unzip、php 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.json的config段) - 设为 0 表示禁用检查,但不推荐——Git 不可达或脚本死循环时会无限卡住
验证是否生效 & 容易踩的坑
运行 composer config http-timeout 或 composer 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 超时,问题还在原地打转。

