Composer install 加速需镜像正确配置、清空元数据缓存、启用--prefer-dist、设parallel-downloads为10并加--no-dev,缺一不可;单独换镜像仅提速2–3倍,组合优化可将4–6分钟压缩至20–40秒。

composer install 的速度提升不是线性叠加的,而是由多个配置项协同生效的结果。单独换镜像,可能只提速 2–3 倍;但配合 --prefer-dist、parallel-downloads 和缓存清理,实测多数项目能从 4–6 分钟压到 20–40 秒。
镜像源本身不提速,元数据拉取才是瓶颈
卡在 Loading composer repositories 的本质是 Composer 要全量下载 packagist.org 的 packages.json(含所有包的版本索引),这个文件超 100MB,HTTPS 解析 + TLS 握手 + CDN 距离导致单次耗时常达 8–15 秒。国内镜像(如阿里云、清华)把该元数据缓存在本地节点,首请求可压到 0.3–0.8 秒。但注意:
- 镜像同步有延迟,新发布包可能 5–30 分钟后才可见
- 如果
composer config -g repo.packagist输出为空或仍是<a href="https://www.php.cn/link/5b4ba6e852444462a8e1223fc42e1af8">https://www.php.cn/link/5b4ba6e852444462a8e1223fc42e1af8</a>,说明根本没走镜像,所有后续优化都无效 -
composer diagnose中的Repo: <a href="https://www.php.cn/link/1569ae888190eb8c53b218b0d529e1e9">https://www.php.cn/link/1569ae888190eb8c53b218b0d529e1e9</a>行必须出现,否则不算真正生效
--prefer-dist 不是可选项,是加速前提
--prefer-dist 让 Composer 下载预编译的 ZIP 包,而非 clone Git 仓库。但它的效果完全依赖镜像是否缓存 dist:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 阿里云、腾讯云、清华镜像只缓存
dist,几乎不缓存source - 如果镜像未生效,
--prefer-dist会 fallback 到慢速 source,甚至报错Could not find a matching version - 项目级
"prefer-source": true会直接覆盖全局--prefer-dist,必须用composer config --unset prefer-source或手动删掉该字段
parallel-downloads 在 Composer 2.2+ 才真实并发
默认值是 3,等于串行。设为 10 后,多个 ZIP 包可并行下载,但有两个硬约束:
- 必须是 Composer 2.2 或更高版本(
composer --version确认) - 镜像源必须支持 HTTP/2,否则并发请求会被排队,反而加剧竞争
- 常见错误:
file_put_contents(/tmp/): failed to open stream,说明临时目录冲突,此时应降到 6 或 8
CI/CD 中最容易被忽略的点
Docker 构建或宝塔部署时,composer config -g 很可能写进了 root 用户配置,但实际运行的是 www 或 runner 用户。验证方式很简单:
- 进容器或服务器,用实际执行用户运行
composer config -g repo.packagist - 如果输出为空,说明配置没落到对的地方
- 更稳妥的做法是进项目根目录,执行
composer config repo.packagist composer <a href="https://www.php.cn/link/1569ae888190eb8c53b218b0d529e1e9">https://www.php.cn/link/1569ae888190eb8c53b218b0d529e1e9</a>(不加-g),让配置写进composer.json,Git 提交后自动生效
真正起效的组合从来不是“换一个镜像”,而是:镜像正确写入 + 元数据缓存清空 + --prefer-dist 强制启用 + parallel-downloads 设为 10 + --no-dev 跳过测试依赖。少其中任何一环,速度就卡在某个环节不动。

















