Composer “Operation timed out” 是因 cURL 默认 300 秒 HTTP 超时过短所致,应通过 composer config timeout 600~900 调整;COMPOSER_PROCESS_TIMEOUT 对该错误无效,因其仅控制 git 等子进程超时;配合国内镜像源效果更佳。
Composer install/update 时提示 “Operation timed out”
这是 Composer 默认连接 GitHub/GitLab/ Packagist 等源时,底层 cURL 的超时阈值太低导致的,尤其在弱网、代理环境或国内直连境外源时高频出现。错误信息里通常含 Operation timed out 或 cURL error 28。
根本不是网络完全不通,而是请求发出去了,但没在默认 300 秒(5 分钟)内收到完整响应(比如大包下载、重定向链长、DNS 解析慢),就被强行中断。
- Composer 本身不提供全局“超时秒数”配置项,
timeout和process-timeout控制的是不同阶段——前者是 HTTP 请求级(实际生效),后者是子进程执行命令级(如 git clone) -
timeout默认值是300(单位:秒),可直接覆盖;但设太高可能掩盖真实网络问题,建议先试600~900 - 修改方式优先用项目级配置,避免污染全局:
composer config timeout 600
,该命令会写入项目根目录下的
composer.json的config.timeout字段
为什么 set COMPOSER_PROCESS_TIMEOUT 不起作用
很多人搜到 COMPOSER_PROCESS_TIMEOUT 环境变量,但设了仍报超时——因为这个变量只影响 git clone、hg update 这类外部 VCS 命令的执行时长,不控制 HTTP 下载包本身的连接/读取超时。
真正管 HTTP 层的是 timeout 配置项(对应 cURL 的 CURLOPT_TIMEOUT),而 process-timeout 对应的是 CURLOPT_TIMEOUT_MS 的毫秒级变体,但 Composer 当前稳定版(2.x)中并未将其暴露为独立配置,仅通过 timeout 统一控制。