Composer install卡在Resolving dependencies本质是默认执行全量依赖求解,即使有composer.lock;必须加--no-dev --prefer-dist --optimize-autoloader三参数,并禁用Xdebug、调高内存至2G以上,且lock文件需与部署环境PHP版本一致。

Composer依赖解析慢,本质不是网络或硬件问题,而是默认配置未针对部署场景做裁剪——composer install 会反复解析整个依赖图,哪怕你只是想装一遍锁定好的包。
为什么 composer install 会卡在 Resolving dependencies?
这是 Composer 在执行依赖求解(solver)阶段:它读取 composer.lock 后仍要验证所有依赖的约束是否兼容、检查每个包的可用版本、回溯冲突路径。哪怕 lock 文件完整,只要没加限制参数,它就默认走全量解析流程。
- 开发环境常用
composer update触发 solver,但部署时应避免——install才是正确命令,前提是 lock 文件存在且可信 - 如果项目含大量私有包、自定义
repositories或模糊版本约束(如^1.0 || ^2.0),solver 耗时会指数级增长 - PHP 进程内存不足时,solver 可能直接 OOM 中断,报错类似
Allowed memory size of XXX bytes exhausted
必须加的三个参数:--no-dev --prefer-dist --optimize-autoloader
这三个参数不是“可选优化”,而是生产部署的底线配置。漏掉任意一个,都可能让安装时间翻倍甚至失败。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(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)。实测可减少 40%~60% 的依赖节点数量,直接缩短 solver 时间 -
--prefer-dist:强制用压缩包而非 Git 克隆。避免触发 VCS 元数据解析,对含大量子模块或私有 GitLab 仓库的项目尤其关键 -
--optimize-autoloader(或-o):生成vendor/composer/autoload_classmap.php。虽然不直接影响 install 阶段耗时,但能防止后续请求因 autoloader 慢而拖垮整个部署流水线(比如 Laravelartisan optimize失败)
项目级 repositories 配置比全局镜像更可靠
很多人配了 composer config -g repo.packagist ...,却在 CI 中失效——因为 runner 用户没读到全局配置,或项目 composer.json 里写了空 "repositories": {},直接覆盖了镜像源。
- 进项目根目录,运行
composer config repo.packagist composer https://mirrors.aliyun.com/composer/(不带-g) - 该命令会在
composer.json顶层写入"repositories": {"packagist": {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}} - 提交这个变更,CI 构建时就能确保走镜像,避免
Loading composer repositories卡住 - 验证是否生效:加
-vvv运行composer install,日志中出现mirrors.aliyun.com才算真正走通
禁用 Xdebug 和调高内存是硬性前提
Composer solver 是 CPU 和内存密集型任务,Xdebug 会把它拖慢 3~5 倍;默认 1.5G 内存对中大型项目远远不够。
- 部署前先确认:
php -d xdebug.mode=off -m | grep xdebug应无输出;否则用php -d xdebug.mode=off composer install ... - 内存至少设为 2G:
php -d memory_limit=2G composer install ...,Laravel + 50+ 包的项目常需 3G - 不要依赖
ini_set('memory_limit', ...)—— Composer 启动早期就已读取 ini,运行时设置无效
最易被忽略的一点:composer.lock 文件必须由与部署环境一致的 PHP 版本生成。PHP 8.5.5 生成的 lock 文件,在 PHP 8.2 环境下可能触发额外兼容性校验,悄悄延长解析时间。

















