composer并发下载需满足三条件:composer≥2.1、启用curl扩展、全局镜像配置正确(含https及尾部斜杠);仅调高http-max-concurrent-downloads无效,必须配合多镜像(均设"canonical": false)、清缓存及ci中禁用dev/scripts/autoloader。

Composer 并发下载不是“开不开”的问题,而是“能不能稳住”的问题——调高数值却没配镜像、不清缓存、不降重试,反而更容易触发 429 或卡死。
为什么 composer install 还在一行一行下载?
不是没并发,是并发被静默压制了。典型表现:日志里 Downloading https:// 严格顺序出现、CPU 占用长期低于 10%、composer install -vvv 只看到一条请求在动。
必须立刻检查三件事:
-
composer --version是否 ≥ 2.1(低于则先composer self-update) -
php -m | grep curl输出是否含curl(没启用会退化为串行,且不报错) -
composer config -g repo.packagist输出是否为国内镜像地址且结尾带/(如"url": "https://mirrors.aliyun.com/composer/")
http-max-concurrent-downloads 是唯一有效的并发控制项
Composer 2.2+ 废弃了旧版 http-max-concurrent-downloads 以外的所有并发配置。它直接限制 HTTP 请求池大小,影响 install、update、require 全流程。
实操建议:
- 全局设为 8:
composer config -g http-max-concurrent-downloads 8(多数开发机的平衡点) - CI/CD 中临时压到 6:
COMPOSER_MAX_PARALLEL_HTTP_REQUESTS=6 composer install(避免触发镜像 QPS 红线) - 别设超过 10:阿里云/腾讯云镜像在并发 >12 时大概率返回
429 Too Many Requests;GitHub 源可能触发403 rate limit exceeded
多镜像 + "canonical": false 才是并发分发的关键
只配一个镜像,哪怕并发设成 20,所有请求也只会打向同一个源。Composer 的负载均衡依赖显式声明多个非权威镜像。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
正确写法(放在项目 composer.json 的 repositories 下):
{
"type": "composer",
"url": "https://mirrors.aliyun.com/composer/",
"canonical": false
},
{
"type": "composer",
"url": "https://mirrors.tuna.tsinghua.edu.cn/composer/",
"canonical": false
},
{
"type": "composer",
"url": "https://packagist.phpcomposer.com",
"canonical": false
}
注意:"canonical": false 缺一不可,否则 Composer 只认第一个,后面全失效。
并发提速的前提是清缓存和禁用干扰项
旧元数据缓存会强制 Composer 回退到境外源;--no-dev、--no-scripts、--no-autoloader 在 CI 中漏掉任意一个,都可能让安装时间多出 30%–60%。
必须一次性执行:
-
composer clear-cache(清空本地元数据和 dist 包缓存) -
composer install --no-dev --no-scripts --no-autoloader(CI 场景) -
composer dump-autoload --optimize(后续单独补 autoload,避免 install 时同步扫描)
最易忽略的是缓存路径拼接错误:如果 composer config -g repo.packagist 输出的 URL 不以 / 结尾,Composer 会把 packages.json 拼成 https://mirrors.aliyun.com/composerpackages.json,直接 404。










