composer超时需分http请求和子进程两类设置:http-timeout控制网络下载(默认300秒),process-timeout控制git clone等外部命令(默认300秒),二者不可混用,且须通过config命令、环境变量或参数分别配置并验证生效。

Composer 的超时不是单一配置能解决的,它分两类:HTTP 请求超时(下载包)和子进程执行超时(git clone、脚本运行等),必须分开设置,混用会无效。
怎么改 HTTP 下载超时(http-timeout)
这个值控制 Composer 从 Packagist 或镜像源拉取 packages.json、下载 ZIP 包等网络操作的最长等待时间。默认 300 秒,在弱网或没切镜像时极易触发 Could not fetch https://repo.packagist.org/packages.json 错误。
-
composer config --global http-timeout 600—— 全局设为 10 分钟,写入~/.composer/config.json -
composer config http-timeout 600—— 仅当前项目生效,写入composer.json的"config"段 - 环境变量方式:
COMPOSER_HTTP_TIMEOUT=600 composer install,临时覆盖,优先级最高 - 注意:
http-basic和github-oauth配置项完全不影响超时;若用了私有仓库,还要确认 Nginx 的proxy_read_timeout没卡住后端响应
怎么改子进程执行超时(process-timeout)
这个值只管 Composer 自己启动的外部命令,比如 git clone、unzip、php ./vendor/bin/phpunit 这类操作。一旦超时就抛 ProcessTimedOutException,但跟网络无关——即使所有包都已缓存,post-install 脚本跑太久也会被杀。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
composer config --global process-timeout 1800—— 全局设为 30 分钟(推荐值区间:600~3600) -
composer config process-timeout 1200—— 项目级,写入composer.json,优先级高于全局 - 命令行临时覆盖:
composer install --process-timeout=1800或COMPOSER_PROCESS_TIMEOUT=1800 composer update - 设为
0表示禁用检查,不推荐:远程 Git 仓库彻底不可达时会无限卡住,且掩盖真实问题(如死循环脚本)
为什么加了 --process-timeout 还报网络错误?
因为 process-timeout 对 HTTP 层完全无效。你看到的 curl error 28、Connection timed out 或 failed to open stream 都是 PHP cURL 或 stream 层的问题,根源在 http-timeout 或 PHP 底层配置。
- 先运行
php -i | grep default_socket_timeout,CLI 模式下这个值太小(如 60)也会中断连接 - 临时绕过:
php -d default_socket_timeout=600 $(which composer) install - 长期方案:修改 CLI 专用
php.ini(路径用php --ini查),调高default_socket_timeout和max_execution_time - CI 环境中常见“假超时”:
--no-interaction忘加,导致 Composer 卡在交互提示(如证书确认),看起来像超时
怎么快速定位到底是哪一步超时?
Composer 不会直接告诉你「第几个命令超时」,但可以通过日志推断:
- 加
-v参数重试:composer install -v,观察最后一条Running command (CWD):输出,就是刚启动但没返回的那个子进程 - 用
--no-scripts跳过所有post-install-cmd,如果不再超时,说明问题出在某个脚本里 - Linux/macOS 可配合
strace -f -e trace=execve,wait4 composer install 2>&1 | tail -20抓实际执行的命令 - Windows 用户可用 Process Explorer 观察
git.exe或php.exe是否持续占用 CPU 或挂起
最常被忽略的一点:改完任何 timeout 配置后,别急着重试,先确认是否真被应用——运行 composer diagnose -v | grep timeout,看输出里两个 timeout 值是否匹配你的预期。否则可能白改。










