composer 2.1+ 原生支持并行下载,无需插件;确认方式为执行 composer install -vvv 观察多 url 同时下载或进度快速跳变,且版本必须 ≥2.1、禁用 hirak/prestissimo、配置 http-max-concurrent-downloads 并搭配阿里云镜像与 clear-cache。

hirak/prestissimo 已彻底失效,别装它,也别找“兼容方案”——Composer 2.1+ 原生支持并行下载,插件反而会静默降级为串行、破坏 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,否则旧包可能仍走原源 - 某些企业网络复用 cURL 的 DNS 缓存,导致镜像域名解析仍走海外节点;可加环境变量绕过:
export COMPOSER_NO_INTERACTION=1 - 私有 GitLab/GitHub 包若未显式声明
dist地址,--prefer-dist会直接报错Could not find a matching version of package xxx
CI/CD 中必加的四个参数
本地开发可以宽容,但构建环境必须精简动作。漏掉任意一个,都可能让安装时间从 20 秒拉长到 3 分钟。
-
--prefer-dist:强制 dist,跳过 git clone 和 checkout -
--no-dev:跳过require-dev里的全部包(PHPUnit、PHPStan 占体积大头) -
--no-scripts:防止post-install-cmd触发 npm 构建、DB 迁移等意外操作 -
--no-autoloader:不生成vendor/autoload.php,后续用composer dump-autoload --optimize单独补
复杂点在于:这些优化全依赖 composer.lock 的完整性与镜像源的 dist 缓存覆盖度;一旦项目里存在 "prefer-source": true 或大量 path 类型仓库,整个并行链路就会 fallback 到串行 source 模式,且毫无提示。










