composer 运行慢主因是本地配置错误、缓存未清、参数缺失;关键优化包括删 minimum-stability、禁用 xdebug、限并发下载、换镜像源后清缓存、生产环境加 --no-dev 等四参数,并确保 autoload 不含 tests/examples。

Composer 运行慢,95% 的情况不是网络卡,而是本地配置没对、缓存没清、参数没加——尤其在 PHP 8.2+、Composer 2.5+ 环境下,几个关键开关一错,composer install 就会多耗 2–3 倍时间。
为什么 composer install 卡在 “Resolving dependencies”
这不是在下载,是 Composer 在本地穷举所有可能的版本组合。约束越宽(比如 "monolog/monolog": "*" 或 "^1.0 || ^2.0"),求解时间越容易从秒级跳到分钟级。
- 检查
composer.json是否含"minimum-stability": "dev"—— 删掉它,稳定版能大幅缩减候选集 - 确认没启用
xdebug:它会让解析慢 5–10 倍;临时禁用命令是php -d zend_extension= -d xdebug.mode=off /usr/bin/composer install - 避免
--with-all-dependencies或--ignore-platform-reqs,它们会绕过缓存、触发全量重算 - 想快速定位冲突?运行
composer why-not vendor/package:version,比干等强得多
composer install 卡在 “Installing dependencies” 怎么办
这个阶段卡住,基本是下载或解压问题,和依赖解析无关。常见于低内存容器、WSL2 挂载卷、或并行数设太高。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 限制并发下载数:
composer config -g parallel-downloads 4(默认 20,2GB 内存机器容易 OOM) - 换镜像源后必须执行
composer clear-cache—— 否则旧缓存仍走 packagist.org,提速效果打折扣 - 禁用 CLI 模式下的
opcache.enable_cli=1(PHP 8.2+ 中它反而拖慢 Composer 自身加载) - 删掉已废弃的
fxp/composer-asset-plugin插件,它会严重干扰依赖解析流程
生产环境部署必加的四个参数
CI/CD 或线上构建中,漏掉任意一个都可能让 composer install 多花 30%–60% 时间。
-
--no-dev:跳过require-dev下所有包(如phpunit、phpstan),也防止测试类污染autoload_classmap.php -
--prefer-dist:强制走 ZIP 包而非 Git 克隆,避开 SSH 认证、分支切换等开销 -
--optimize-autoloader:生成静态类映射,但注意 —— 它只在install/update时生效,dump-autoload -o在 Composer 2.5+ 下基本无效 -
--classmap-authoritative:告诉 autoloader “查不到就真没有”,跳过 PSR-4 fallback;但前提是项目没用"files"加载全局函数,且命名空间路径严格匹配(比如"App\": "app/"必须带末尾反斜杠)
哪些配置项常被忽略却影响巨大
很多人改完 composer.json 就以为完了,其实全局配置才是提速关键。
- 镜像源必须指向阿里云:
composer config -g repos.packagist.org.url https://mirrors.aliyun.com/composer/(注意不是已停服的 phpcomposer.com) - 缓存目录强制落到 SSD:
composer config -g cache-dir ~/.composer/cache,别让它默认塞进加密卷或机械盘 - 关掉交互提示:
composer config -g discard-changes true,否则 CI 脚本会卡在 “Discard changes and run install?” - 开发机上慎用
--classmap-authoritative:新增类不会被自动发现,调试时容易误判为“类不存在”
最易被忽略的一点:autoload 配置里混进了 tests/、examples/ 目录,会导致 autoload_classmap.php 体积暴涨至几 MB,每次请求都要反序列化全量数组——而单次请求实际只用到其中不到 5% 的类。










