最快装包方式是让composer少做事、走捷径、不绕路:用dist包、走国内镜像、跳过非必要环节;需确认dist生效(日志见mirrors.aliyun.com/dists/)、并发设6–10、ci必加--prefer-dist --no-dev --no-scripts --no-autoloader并清缓存。

装包最快的方式不是“多线程硬刚”,而是让 Composer 少做事、走捷径、不绕路——核心就三点:用 dist 包、走国内镜像、跳过非必要环节。
怎么确认 composer install 真的在走 dist 路径
加了 --prefer-dist 或配了全局 prefer-dist true 不代表一定生效。真正起效的前提是:包本身提供了 dist 信息,且镜像源缓存了它。
- 运行
composer show monolog/monolog(换为你项目里的任一依赖),看输出里是否有dist字段,且type是zip或tar;没有就说明该包只提供 source,--prefer-dist会静默 fallback - 执行
composer install -vvv,日志中出现Downloading https://mirrors.aliyun.com/composer/dists/...才算真走 dist;如果还是Cloning https://github.com/...,说明要么镜像没切对,要么包没 dist,要么项目级"prefer-source": true覆盖了全局设置 - 私有 GitLab/GitHub 包若没在
composer.json里显式声明dist地址,--prefer-dist会直接报错Could not find a matching version of package xxx
composer config -g parallel-downloads 设多少才不翻车
并发数不是越高越好。设成 20 可能触发临时文件竞争或镜像限流,反而比默认还慢。
- 先确认版本:
composer --version必须 ≥ 2.2;旧版设了也无效,得先composer self-update --prefer-dist - 安全起点是 6~10:多数 CI 机器和本地开发机跑
composer config -g parallel-downloads 10稳定;超过 12 容易遇到file_put_contents(/tmp/...): failed to open stream - 如果加了参数但下载仍卡在单个包,可能是镜像源不支持 HTTP/2 多路复用,可临时切回官方源测试:
composer config -g repo.packagist composer https://packagist.org,再试--concurrency=6
CI/CD 里 composer install 必加的四个参数
本地开发可以宽容,但构建环境必须精简动作。漏掉任意一个,都可能让安装时间从 20 秒拉长到 3 分钟。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
--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 install --prefer-dist --no-dev --no-scripts --no-autoloader
为什么清缓存比换镜像还关键
很多人换了阿里云镜像,却忘了 composer clear-cache,结果 Composer 依然从旧元数据出发,反复尝试解析 packagist.org 的 URL,卡在 DNS 或 TLS 握手阶段。
- 执行
composer config -g repo.packagist输出正确 ≠ 生效;必须配合composer clear-cache才能让新镜像真正接管 - 验证是否清干净:删掉
~/.composer/cache/下所有内容,再跑一次composer install -vvv,观察日志里首次读取的 packages.json 是否来自mirrors.aliyun.com - 项目级
repositories配置会覆盖全局镜像;用composer config --list和composer config --list --global对比,确认没被悄悄覆盖
最常被忽略的点是:镜像配置写对了、并发开足了、参数也全了,但缓存里还躺着 packagist.org 的旧包列表,Composer 就会一边连国内镜像,一边拿海外元数据去校验——两头堵,谁也快不了。










