composer 2.1+ 原生支持并行下载,禁用 hirak/prestissimo;确认方式为执行 composer install -vvv 并观察多 url 同时下载或进度快速跳变;有效配置仅 http-max-concurrent-downloads,需配合阿里云镜像与 clear-cache 使用。

Composer 2.1+ 原生支持并行下载,hirak/prestissimo 在 Composer 2.x 中不仅无效,还会干扰调度逻辑、静默降级为串行,甚至破坏 composer.lock 结构——别装它,也别试图“兼容启用”。
怎么确认并行下载真在跑
别信配置项是否写了,要看日志是否动态并发:执行 composer install -vvv,若同时出现多行 Downloading https://mirrors.aliyun.com/...,或进度显示类似 Downloading (7/42) → (12/42) 快速跳变,说明并发已激活。如果始终单行打印、卡在某个包不动,大概率是镜像响应慢或被限流,不是并发没开。
- 运行
composer --version,输出必须是Composer version 2.1.x或更高;低于此版本(如1.10.22)压根不支持原生并行 -
composer diagnose若仍提示hirak/prestissimo,说明插件残留,必须先执行composer global remove hirak/prestissimo - 检查 PHP 是否启用了
curl扩展:php -m | grep curl,没启用会退化为串行且不报错
http-max-concurrent-downloads 是唯一有效的并发配置
parallel-downloads 已在 Composer 2.2+ 中弃用,设了也不生效,还可能误导你。真正起作用的是 http-max-concurrent-downloads,它直接控制 HTTP 请求池大小。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 全局设为 8(多数机器的稳妥上限):
composer config -g http-max-concurrent-downloads 8 - 值不是越高越好:设成 20 容易触发
file_put_contents(/tmp/): failed to open stream(临时文件竞争),阿里云/腾讯云镜像在 >12 并发时也常返回429 Too Many Requests - 这个配置只对
composer install生效;composer update因需实时解析依赖图,元数据拉取(如packages.json)仍是串行,无法提速
镜像源没换,调再高也没用
并发只是“同时发请求”,如果每个请求都卡在 DNS 解析、TLS 握手或首字节延迟上,开 10 个线程等于 10 个排队窗口。
- 全局换阿里云源(最稳):
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 换源后必须清缓存:
composer clear-cache,否则旧元数据仍尝试回源 - 验证是否生效:
composer config -g repo.packagist输出应为完整 URL,不是null或空值 - 别用已停更的源(如
packagist.phpcomposer.com),清华源新地址是https://mirrors.tuna.tsinghua.edu.cn/composer/
CI/CD 中必须关掉的三件事
composer install 的耗时大头往往不在下载,而在后续环节——这些环节根本不走并发,却严重拖慢构建。
-
--no-dev:跳过dev-dependency,这类包通常体积大、校验重、且含大量 Git 操作 -
--no-scripts:禁用post-install-cmd等钩子,避免意外触发npm install、phpunit --coverage或数据库操作 -
--prefer-dist:强制走预打包 ZIP 包,跳过git clone和checkout;不加它,并行下载的只是大体积源码,解压和校验反而更慢
真正卡住的,往往不是并发数,而是 DNS 解析慢、镜像源失效、或 composer.json 里写了带通配符的不稳定版本约束(比如 "monolog/monolog": "^1.0 || ^2.0")。先跑一次 composer diagnose,比硬塞插件有用得多。










