依赖解析超时本质是SAT求解器暴力回溯导致,非网络问题;需同步延长process-timeout、禁用并行、清理冗余仓库、精简autoload规则,并检查PHP max_execution_time、lock文件平台约束及minimum-stability设置。

依赖解析阶段超时,本质不是网络问题,而是 Composer 在 resolve 阶段卡在 SAT 求解器里反复回溯——调 process-timeout 有用,但必须同步禁用并行、清理冗余仓库、简化 autoload 规则,否则光加 timeout 只是让卡顿更久。
为什么 composer install/update 卡在 “Resolving dependencies…” 不报错也不下载
这个阶段不走网络,纯 CPU 计算:Composer 把所有 require 和 conflict 规则转成布尔表达式,用 SAT 求解器找一组满足全部约束的版本组合。一旦依赖树复杂(比如 Laravel + Symfony + 多个私有包 + 版本交叉约束),求解可能耗尽默认 300 秒 process-timeout,直接中断,错误里常带 [RuntimeException] The process "php ..." exceeded the timeout。
- 不是网速慢,换镜像源完全无效
- 不是磁盘或内存不足,
top看到单核 CPU 100% 占用 - 常见于含大量
dev-master、^x.y.z和conflict的项目,或repositories里硬编码了多个不稳定源
快速缓解:临时延长 process-timeout 并关掉并行
先让命令跑完,确认是否真卡在 resolve 阶段:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 临时加 timeout:
COMPOSER_PROCESS_TIMEOUT=1200 composer update(设为 20 分钟) - 禁用并行解析(降低内存/CPU 压力):
composer config -g disable-tls false不管用,真正有效的是:composer config -g process-timeout 1200+composer config -g use-include-path false(后者减少 autoload 扫描干扰) - 若用 CI/CD,务必显式传环境变量:
COMPOSER_PROCESS_TIMEOUT=1800 COMPOSER_HOME=/tmp/composer composer install,避免容器重启后配置丢失
根治依赖解析慢:精简 repositories 和 autoload 规则
90% 的长解析时间来自冗余源和低效 autoload 配置:
- 检查
composer.json顶层repositories字段,删掉所有非必需的私有源或测试源;硬编码的packagist.org会覆盖全局镜像,且不加速 resolve 阶段 - 把
autoload中的psr-4映射收窄:例如从"App\": "app/"改为"App\Controllers\": "app/Http/Controllers/",避免 resolve 时扫描整个app/目录 - 移除
require-dev中非构建必需的包(如phpunit/phpunit在 CI 安装时加--no-dev),大幅减少约束数量 - 运行
composer show --tree | head -50查看依赖树深度,若超过 12 层,考虑拆分包或锁定关键版本(如"laravel/framework": "10.48.0"而非"^10.0")
容易被忽略的点:PHP 配置和 lock 文件残留
即使 timeout 设很高,仍可能卡死:
-
php.ini中max_execution_time若设为 30,会直接 kill 掉 Composer 进程,跟process-timeout无关;查:php -i | grep max_execution_time - 旧版
composer.lock含冲突的平台约束(如"platform": {"php": "8.1"}),而当前 PHP 是 8.3,resolve 会无限尝试兼容路径;删 lock 文件重试 -
composer.json里写了"minimum-stability": "dev",强制 Composer 尝试所有 dev 分支版本,求解空间爆炸;改回"stable"再试

















