Composer在ARM服务器上特别慢的根本原因是默认启用source模式,导致CPU单核弱、I/O带宽低的ARM设备需耗时解压+写入+扫描大量文件,且post-install-cmd可能调用x86_64二进制失败;必须强制prefer-dist、启用parallel-downloads、禁用scripts与dev依赖,并清理非ARM二进制。

为什么 composer install 在 ARM 服务器上特别慢?
根本不是 Composer 本身慢,而是它默认走 source 模式下载并解压 ZIP 包,再执行 PHP 层的 autoloader 生成——ARM 服务器(尤其是树莓派、鲲鹏、Graviton)CPU 单核性能弱、I/O 带宽低,解压+写入+扫描成千上万个文件会卡住数分钟。更糟的是,某些包的 post-install-cmd 脚本还调用 x86_64 二进制或触发编译(如 ext-swoole),直接失败。
必须禁用 source,强制走 dist + 并行下载
ARM 上跑 composer install 前,先确保全局配置生效:
-
composer config -g prefer-dist true—— 强制所有包走预编译 ZIP 包(体积小、解压快) -
composer config -g parallel-downloads 10—— Composer 2.2+ 支持并发下载,ARM 多核能利用起来 -
composer config -g github-protocols https—— 避免 ssh 协议握手失败(ARM 上 libssh2 编译常不全)
验证是否生效:composer config -g prefer-dist 应输出 true;如果仍走 source,检查项目级 composer.json 是否有 "prefer-source": true 覆盖了全局设置。
跳过 autoload 生成和 dev 依赖,专为部署精简
生产环境不需要自动加载器实时重建,也不需要 phpunit 或 larastan 这类工具。用这组参数组合最稳:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
--no-dev—— 不装require-dev下的包,减少 30%+ 文件量 -
--optimize-autoloader—— 生成vendor/composer/autoload_classmap.php,避免 runtime 文件查找 -
--no-scripts—— 跳过所有post-install-cmd,防止执行非 ARM 兼容脚本 -
--no-progress—— 关掉进度条,减少终端 I/O(对串口/SSH 连接尤其重要)
完整命令示例:composer install --no-dev --optimize-autoloader --no-scripts --no-progress
vendor 目录里藏着 x86_64 二进制?立刻清理
有些包(如 pestphp/pest、spatie/browsershot)会在 vendor/bin 放预编译二进制,它们极大概率是 x86_64 的。在 ARM 上运行会报 cannot execute binary file: Exec format error。
检查方法:file vendor/bin/* 2>/dev/null | grep "x86_64"
- 发现就删:
rm -f vendor/bin/pest vendor/bin/browsershot - 改用纯 PHP 替代:比如用
php artisan test代替pest,或加--no-bin-links参数安装 - CI/CD 中加防护:
composer install --ignore-platform-reqs仅用于跳过扩展检查,但不能解决二进制问题;真正可靠的是在composer.json的config段声明"platform": {"php": "8.3"},并配合--no-scripts
ARM 上的 Composer 流程优化,核心不是“让它更快”,而是“让它别做不该做的事”——删掉源码解压、绕过脚本、剔除非 ARM 二进制,剩下的才是真·轻量。

















