composer install卡在“loading composer repositories”或“downloading”超时,主因是默认http.timeout(60秒)和process-timeout(300秒)过短,需同时设为600和1200并验证生效;镜像配置错误(如键名复数、缺type值、url少斜杠)会导致超时设置无效。

为什么composer install卡在“Loading composer repositories”或“downloading”就超时
这不是网络断了,是 Composer 默认只等 30–60 秒就放弃。它分两个阶段计时:http.timeout管单次 HTTP 请求(比如拉 packages.json 或 zip 包),process-timeout管整个命令生命周期(含 git clone、解压、生成 autoload)。两者默认值都偏低,尤其在国内镜像首字节延迟高、CI 环境资源紧张时,极易触发 cURL error 28 或 Connection timed out。
http.timeout 和 process-timeout 必须同时设,不能只调一个
只改 http.timeout,git clone 还是会卡在 300 秒;只调 process-timeout,HTTP 下载阶段仍可能 60 秒就断。实操建议如下:
-
http.timeout:控制 DNS 解析 + TLS 握手 + 首字节等待 + body 下载总时长,国内镜像建议设为600(10 分钟) -
process-timeout:覆盖从依赖解析到脚本执行的全过程,大项目或 CI 推荐设为1200(20 分钟) - 命令写法必须带
-g才写入全局配置:composer config -g http.timeout 600、composer config -g process-timeout 1200 - 验证是否生效:
composer config -g --list | grep timeout,输出里必须同时出现这两项
镜像配置写错,http.timeout 再大也没用
很多人执行了 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 就以为搞定了,结果 composer show 里还是看到 repo.packagist.org。原因往往是:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 键名写成复数
repos.packagist或repositories.packagist.org→ 静默失败 - 漏掉中间的
composer(即type值)→ Composer 2.x 直接 fallback 到官方源 - URL 缺末尾斜杠:
https://mirrors.aliyun.com/composer❌ → 实际请求/composer/packages.json返回 404 - Windows 用户改完没重启终端 → PHP 进程读不到新环境变量
验证方式只有一条:composer config -g repo.packagist 输出必须是完整 JSON:{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}
CI/CD 构建中 timeout 配置容易失效的三个盲点
容器每次启动都是干净环境,很多配置看似写了,实际根本没加载:
-
COMPOSER_HOME未固化 → 全局配置存在临时目录,重启后丢失 - 没清缓存:
composer clear-cache必须在换源后立即执行,否则仍用旧索引 - 项目级
composer.json里有repositories字段 → 优先级高于全局配置,会覆盖镜像设置
更稳的做法:在构建脚本开头直接运行两条命令:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 和 composer config -g http.timeout 600,别依赖之前的状态。










