composer运行慢95%源于本地配置错误、缓存未清或关键参数缺失;优化需删minimum-stability、禁用xdebug、限并发下载、换镜像后清缓存,并在生产环境加--no-dev、--prefer-dist、--optimize-autoloader和--classmap-authoritative四参数。

Composer 运行慢,95% 不是网络问题,而是本地配置错、缓存没清、关键参数漏加——尤其在 PHP 8.2+ 和 Composer 2.5+ 下,几个开关一错,composer install 就会多耗 2–3 倍时间。
为什么 composer install 卡在 “Resolving dependencies”
这不是在下载,是 Composer 在本地穷举所有满足约束的版本组合。约束越宽(比如 "monolog/monolog": "^1.0 || ^2.0" 或 "*"),求解时间越容易从秒级跳到分钟级。
- 删掉
"minimum-stability": "dev":dev 包极大扩充候选集,稳定版能直接砍掉 70%+ 的搜索空间 - 确认没启用 Xdebug:它会让解析慢 5–10 倍;临时禁用命令是
php -d zend_extension= -d xdebug.mode=off /usr/bin/composer install - 检查
composer.lock是否已提交进 Git:没 lock 文件,install就退化成update,强制重算依赖树 - 避免
--with-all-dependencies或--ignore-platform-reqs:它们绕过缓存,强制全量重算
为什么 composer install 卡在 “Installing dependencies”
这个阶段卡住,基本是下载、解压或文件 I/O 问题,和依赖解析无关。常见于低内存容器、WSL2 挂载卷、或并发数设太高。
- 限制并发下载数:
composer config -g http-max-concurrent-downloads 8(默认是 6;设成 20 容易触发file_put_contents(/tmp/): failed to open stream) - 换镜像源后必须执行
composer clear-cache——否则旧缓存仍走packagist.org,提速效果打折扣 - 禁用 CLI 模式下的
opcache.enable_cli=1(PHP 8.2+ 中它反而拖慢 Composer 自身加载) - 删掉已废弃的
fxp/composer-asset-plugin插件,它会严重干扰依赖解析流程
composer install 生产部署必须加的四个参数
CI/CD 或线上构建中,漏掉任意一个都可能让 composer install 多花 30%–60% 时间。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
--no-dev:跳过require-dev下所有包(如phpunit、phpstan),也防止测试类污染autoload_classmap.php -
--prefer-dist:强制走 ZIP 包安装,避免 Git 克隆开销;对私有仓库也有效(只要提供 dist URL) -
--optimize-autoloader(或-o):生成vendor/composer/autoload_classmap.php,跳过运行时路径拼接和file_exists()调用 -
--classmap-authoritative(或-a):告诉 autoloader “类不在 classmap 里就别找了”,彻底关闭 fallback,高并发下收益最明显
完整命令示例:composer install --no-dev --prefer-dist --optimize-autoloader --classmap-authoritative
全局配置要一次性设对,影响所有项目
这些配置优先级高于项目级配置,且一劳永逸:
-
composer config -g repos.packagist composer https://mirrors.aliyun.com/composer/(注意不是已停服的 laravel-china 源) -
composer config -g cache-dir ~/.composer/cache:务必指向 SSD 路径,别让它默认落在 NFS、Docker volume 或加密卷上 -
composer config -g discard-changes true:避免 CI 脚本卡在交互提示 “Discard changes and run install?” -
composer config -g http-max-concurrent-downloads 10:Composer 2.2+ 才支持;值 >10 容易出错,内存紧张时建议降到 6 或 8
设完记得立刻执行 composer clear-cache,否则新配置不生效。
开发环境误加 --classmap-authoritative 是最常被忽略的坑:它会导致你新增一个 App/Service/Foo.php 类后,class_exists('App\Service\Foo') 返回 false——因为不再 fallback 查文件。这个参数只应在生产构建或 CI 流程中使用。










