composer install 慢的根源是本地依赖解析而非网络,关 xdebug、换镜像、禁用 dev 依赖、启用 classmap 权威模式四步可从 90 秒降至 12 秒。

Composer 本身不慢,慢的是默认配置叠加低效环境——关掉 Xdebug、换镜像、禁用 dev 依赖、开 classmap 权威模式,四步就能让 composer install 从 90 秒压到 12 秒。
为什么 composer install 卡在 “Resolving dependencies”
这不是网络问题,是 Composer 在本地穷举版本组合。尤其当 composer.json 里有 "monolog/monolog": "^1.0 || ^2.0" 这类宽泛约束,或启用了 xdebug(拖慢 5–10 倍),CPU 就会卡死。
- 先确认是否开了 Xdebug:运行
php -v看输出里有没有xdebug;有就临时禁用:php -d zend_extension= -d xdebug.mode=off /usr/bin/composer install - 检查
composer.json是否写了"minimum-stability": "dev"—— 删掉它,稳定版能大幅减少候选版本数 - 如果只是想装 lock 文件里的确定版本,别用
update,直接跑composer install --no-interaction,跳过求解阶段
--optimize-autoloader 和 --classmap-authoritative 能不能一起用
能,而且必须一起用——但只限生产构建或 CI 流程,开发环境绝对不要加。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
-
--optimize-autoloader(或-o)会生成vendor/composer/autoload_classmap.php,把 PSR-4 映射转成静态数组,PHP 7.4+ 还能进 opcache -
--classmap-authoritative(或-a)告诉自动加载器:“映射里没有,那就真没有”,彻底跳过文件系统扫描 - 组合命令才是线上黄金标准:
composer install --no-dev --prefer-dist --optimize-autoloader --classmap-authoritative - 开发时误加
-a,会导致你新增一个App/Service/Foo.php类后,class_exists('App\Service\Foo')返回false—— 因为它不再 fallback 查文件
缓存到底怎么才算“真正生效”
很多人清了 composer clear-cache 就以为优化完了,其实缓存要“被用上”才有效。关键在两层:全局下载缓存(zip 包)和本地 autoload 缓存(APCu / opcache)。
- 确保
cache-dir指向 SSD 或高速路径:composer config -g cache-dir "/tmp/composer-cache",别让它默认落在 NFS 或 Docker volume 上 - CI 中必须显式缓存
~/.composer/cache目录,并用composer.lock的 SHA256 当 cache key,避免跨版本污染 - 启用 APCu 加速 autoload:PHP 得先装扩展并确认
apcu.enable_cli=1(CLI 下也要开),然后在composer.json的config段加"apcu-autoloader": true,再跑composer dump-autoload - 注意:APCu 缓存只对 web SAPI 有效;CLI 场景下若同时开了
opcache.enable_cli=1,反而可能掩盖类未加载的 bug
升级 Composer 2.x 后为什么更慢了
不是更慢,是行为更严格——旧 composer.lock 不兼容新算法,首次安装必须重建锁文件,耗时拉长是正常现象。后续 install 才真正提速。
- 升级后立刻删掉
composer.lock,再跑composer install,触发完整依赖图重建(首次慢,但值得) - 检查插件兼容性:
dealerdirect/phpcodesniffer-composer-installer这类老插件会报composer-plugin-api 1.1.0不兼容警告,建议移除或升级 - 确认
config.platform.php设置没锁死低版本 PHP,否则会因平台约束反复回退版本,卡在解析阶段 - 如果 CI 流水线原来硬写了
composer install --no-dev,升级后得补上--ignore-platform-reqs或调高platform配置,否则可能因 require-dev 里的 PHPUnit 版本冲突失败
最容易被忽略的点是:vendor 目录所在文件系统。WSL2 挂载 Windows 盘、macOS APFS 启用加密、Windows NTFS 配合实时杀毒软件,都会让解压写入变慢 3–5 倍——这不是 Composer 能优化的,得从挂载方式或安全策略下手。










