答案:停在resolving dependencies是dns或元数据拉取失败,非http超时;停在downloading才调http-basic-timeout;停在executing command才调process-timeout;两者作用域不同,须按日志末行精准对应调整。

直接看 -vvv 输出的最后一行,卡在哪就调哪个超时参数——不是所有“超时”都该调 process-timeout。
怎么一眼看出是哪层超时
运行 composer install -vvv 或 composer update -vvv,盯住终端最后几行:
- 停在
Resolving dependencies:DNS 或 Packagist 元数据拉取失败,跟http.timeout无关;试dig packagist.org或换 DNS(如114.114.114.114) - 停在
Downloading https://...:HTTP 层卡住,要调http-basic-timeout(Composer 2.2+)或旧版的http.timeout - 停在
Executing command (CWD: ...):比如git clone或unzip卡死,这时才轮到process-timeout或环境变量COMPOSER_PROCESS_TIMEOUT - 停在
Generating autoload files后不动:不是网络问题,是文件系统(如 WSL2 symlink 解析慢)、APCu 未启用 CLI 模式,或 PHPmemory_limit不足
两个 timeout 参数别混用
http-basic-timeout 和 process-timeout 完全不重叠,只改一个等于白改:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
http-basic-timeout(Composer ≥ 2.2):控制单次 HTTP 请求(含 TLS 握手、首字节等待、body 传输),默认 60 秒;大包下载慢时建议设为300~600 -
process-timeout:控制整个命令生命周期,含依赖解析、解压、执行脚本、生成 autoloader,默认 300 秒;复杂项目建议设为1200 - 临时生效:加参数
--http-basic-timeout=300 --process-timeout=1200;永久生效用composer config -g http-basic-timeout 300和composer config -g process-timeout 1200
镜像没生效?先清缓存再查优先级
换了阿里云或腾讯镜像还报错,大概率是配置被覆盖或缓存没清:
- 必须执行
composer clear-cache,否则 Composer 可能继续读本地失效缓存 - 检查是否项目级
composer.json里硬写了"repositories"—— 它优先级高于全局镜像,会直接忽略config -g设置 - 验证是否真生效:运行
composer config -g repos.packagist(注意是复数repos,不是repo),输出应为镜像 URL;若为空,说明没写对 - 清华源等 URL 必须带末尾斜杠:
https://mirrors.tuna.tsinghua.edu.cn/composer/,少一个/就 404
CI 环境下容易漏掉的关键点
流水线里超时更隐蔽,光调参数不够:
- 必须配环境变量
COMPOSER_PROCESS_TIMEOUT=1200,CI 容器常禁用 shell 超时继承,--process-timeout参数可能被忽略 - 禁用 packagist.org 回源:
composer config -g repos.packagist false,否则 fallback 会拖慢整条链路 - 私有 Git 包要用 HTTPS 克隆而非 SSH,避免因
GIT_SSH_COMMAND配置缺失导致卡在Cloning into - WSL2 下记得关掉元数据扩展:
sudo chattr +E /path/to/project,否则Generating autoload files会慢到像卡死
真正卡住的地方往往不在日志最显眼的位置——比如 -vvv 最后一行停在 Downloading,但实际是前面某次 GET /packages.json 的响应体被中间代理截断,导致后续 SAT 求解器无限回溯。这种问题调 timeout 没用,得靠 curl -I 直接测镜像 URL 响应头。










