Composer装包超时需同步调高http.timeout和process-timeout并确认镜像源生效;--timeout仅控命令总周期,HTTP下载阶段由http.timeout(默认60秒)单独控制,二者独立触发。

Composer 装包报超时,不是网络断了,而是默认配置和国内真实网络环境严重错配——必须同步调高 http.timeout、process-timeout,并确认镜像源真正生效;只改一个参数基本无效。
为什么加了 --timeout 还报 “The process timed out”
因为 --timeout 只控制整个命令生命周期(含解压、脚本执行、autoloader 生成),但卡在 Downloading 阶段时,真正拦住你的是底层 HTTP 请求超时(http.timeout,默认仅 60 秒)。这两个超时是独立触发的:
-
http.timeout控制单次请求:DNS 解析、TLS 握手、首字节等待、body 下载,任一环节超时即中断 -
process-timeout控制总耗时:哪怕所有 HTTP 请求都成功,跑 post-install-cmd 脚本慢也会触发它 - Composer 2.2+ 中
http-basic-timeout已废弃,http-timeout是旧版别名,新版本只认http.timeout - 临时加
COMPOSER_PROCESS_TIMEOUT=3600环境变量,只影响process-timeout,对 HTTP 层无效
怎么验证镜像源是否真在用
很多人执行了 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 就以为搞定了,其实可能根本没走通:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 运行
composer config -g repos.packagist,输出必须是{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"},而不是packagist.org或空值 - 手动测连通性:
curl -I https://mirrors.aliyun.com/composer/packages.json,应秒回HTTP/2 200;若超时或 404,说明是本地 DNS、代理或防火墙问题 - 项目级
composer.json中的repositories字段会覆盖全局配置,需检查是否硬编码了packagist.org或错误 URL - Windows 自动检测代理、macOS PAC 脚本、杀毒软件 HTTPS 扫描,都会卡在 TLS 握手阶段,导致看似“超时”实为连接阻断
CI/CD 中反复失败的硬性操作清单
CI 环境每次都是干净容器、无缓存、DNS 策略严、内存受限,靠本地经验硬套必翻车:
- 必须开启缓存:
cache: $HOME/.composer/cache(GitHub Actions)或对应 GitLab CI 配置,否则每次重下百 MB zip 包 - 强制走 dist 包:
composer install --prefer-dist --no-interaction --no-progress --timeout=7200,跳过 git clone 触发 GitHub API 限流 - 企业网必须设
HTTPS_PROXY(不是HTTP_PROXY),且确保证书可信;否则 Composer 默认全走 HTTPS,代理不生效 -
process-timeout超过 7200 秒会被 Composer 硬编码强制回退到 300 秒,别设 24 小时——真卡住时,你分不清是网络故障还是脚本死循环
超时背后常是更隐蔽的链路问题
看到 cURL error 28: Operation timed out after 300000 milliseconds 别急着调参,先跑 composer install -vvv 看最后一行:
- 停在
Resolving dependencies→ DNS 或域名解析失败,跟 timeout 无关,换 DNS 或dig packagist.org测 - 停在
Downloading https://...→ 真 HTTP 超时,该调http.timeout - 停在
Executing command (CWD: ...)→ 子进程(如git clone、unzip)卡死,process-timeout才管用 - 停在
Generating autoload files后无响应 → 不是网络问题,是文件系统(WSL2/mnt/c)、PHP 配置(apc.enable_cli=0)或 symlink 递归太深
真正难处理的是混合场景:比如大部分包走阿里云镜像很快,但某个私有 VCS 包仍要直连 GitHub,而它的 HTTPS 克隆被拦截——这时拉长全局 timeout 只会让失败更晚暴露,得单独为 Git 配置 SSH 或 git config --global url."git@github.com:".insteadOf "https://github.com/"。

















