composer install卡在“Resolving dependencies”的核心原因是Composer未正确识别或使用composer.lock文件,常见于lock被忽略、只读、损坏、PHP平台版本不匹配或CI中缓存不一致;应确保lock存在且有效,并配合--no-dev、--prefer-dist、--optimize-autoloader、--no-scripts四参数组合执行。

Composer 导出(composer install)性能不足,核心问题不是“慢”,而是**大量无效计算和重复 IO**。只要确保 composer.lock 存在且未被篡改,就绝不需要执行 composer update —— 后者才是真正的性能黑洞。
为什么 composer install 还会卡在 “Resolving dependencies”?
这个阶段本不该出现:有 composer.lock 时,Composer 应跳过求解,直接按锁文件安装。若仍卡住,说明它在「假装没看到锁文件」或「被迫重解析」。
- 检查
composer.lock是否被 Git 忽略、是否权限为只读、是否内容为空或 JSON 格式损坏 - 确认当前 PHP 版本与
composer.json中"platform"配置匹配(如"php": "8.2"但实际是 8.3,可能触发兼容性回退逻辑) - 运行
composer diagnose,重点看是否报lock file is not up to date或memory limitwarning - CI 环境中常见陷阱:缓存了
vendor/但没缓存composer.lock,或用了--no-cache却没清理旧vendor/
composer install 必加的 4 个参数
生产部署或 CI 构建时,漏掉任意一个都可能让耗时翻倍。
-
--no-dev:跳过require-dev所有包(PHPUnit、PHPStan 等),减少 40%+ 文件量和校验开销 -
--prefer-dist:强制下载 ZIP 包而非克隆 Git 仓库,避免 Git 协议握手、submodule 解析等额外延迟 -
--optimize-autoloader(或-o):生成vendor/composer/autoload_classmap.php,省去运行时 PSR-4 路径拼接和file_exists()检查 -
--no-scripts:跳过post-install-cmd等钩子(如 Laravel 的php artisan optimize:clear),这些脚本常是真瓶颈
组合命令示例:composer install --no-dev --prefer-dist --optimize-autoloader --no-scripts
镜像源 + 并发下载配置必须生效
换源不是“试试看”,而是必须验证是否真正走镜像域名。很多团队配了阿里云镜像,但日志里仍看到 packagist.org,因为项目级 repositories 覆盖了全局配置。
- 全局生效检测:
composer config -g repo.packagist输出应为{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} - 项目级覆盖排查:检查
composer.json里是否有"repositories"字段,如有且含"packagist": false或自定义 URL,需删或改 - 并发下载启用(Composer ≥2.2):
composer config -g http-max-concurrent-downloads 10,别用已废弃的parallel-downloads - 加
-vvv运行一次composer install,从日志第一行下载 URL 确认是否走mirrors.aliyun.com
自动加载器优化不能只靠 -o
--optimize-autoloader 是基础,但在高并发或容器化场景下,它仍每次读取 classmap 文件。更进一步的提速依赖运行时缓存。
- APCu 缓存(推荐):启用
"apcu-autoloader": true并确保 PHP 开启apcu.enabled=1,类加载结果(命中/未命中)均被 APCu 缓存 - 权威类映射(谨慎):
"classmap-authoritative": true可关闭 PSR-4 fallback,但若项目含动态生成类(如 Livewire 组件、某些 IDE 生成类),会导致Class not found - 二者互斥:APCu 更安全,权威映射更快,但上线前必须全链路测试
- 验证是否生效:查看
vendor/composer/autoload_static.php中是否有static::$classMapAuthoritative = true或static::$apcuPrefix
最易被忽略的一点:composer install 命令本身不写入 composer.json 的优化配置;你得手动加到 "config" 下,或用 composer config 写入全局。



















