卡在“Resolving dependencies”是SAT求解器暴力回溯版本冲突所致,非网络问题;应先用composer update -vvv --profile定位瓶颈,若停在“Resolving dependencies through SAT”则属约束不可满足,再通过composer why-not精准定位阻断链并清理或绕过。

卡在“Resolving dependencies”不是网速慢,而是 Composer 正在暴力回溯版本冲突——它在尝试满足所有 require 和 conflict 约束,一旦逻辑不可解,就会无限循环。这时候换镜像、重启终端都没用,得先定位卡点、再精准清理或绕过。
看清卡在哪一步:用 -vvv --profile 抓真实瓶颈
盲目清缓存前,先让 Composer 吐出执行细节:
- 运行 composer create-project laravel/laravel:^10.0 myapp -vvv --profile 或 composer update -vvv --profile
- 若日志停在 Resolving dependencies through SAT → 确认是约束冲突,不是网络问题
- 若卡在 Reading /packages.json from cache 或 Downloading https://... → 才需检查镜像源或 TLS 连接
- 若反复出现 corrupted archive 或 zlib_decode() error → 缓存已损坏,必须清理
缓存清理要彻底:clear-cache + 手动验证
composer clear-cache 默认只清 ~/.composer/cache 下的 repo/files/http,但有时权限或磁盘问题会让清理失败:
- 先查路径:composer config --global cache-dir
- 执行清理:composer clear-cache(macOS/Linux)或 composer clear-cache(Windows)
- 清理后进缓存目录,确认 downloads/ 和 files/ 子目录为空
- 再跑 composer install -v,观察日志是否出现 Downloading 而非 Using cache
强制重装三步到位:删 vendor + 清缓存 + 加参数
仅删 vendor 或仅清缓存都不够,Composer 仍可能复用旧包。真正重来需要切断全部缓存路径:
- rm -rf vendor/(Linux/macOS)或 rmdir /s vendor(Windows)
- composer clear-cache
- composer install --no-cache --prefer-dist --optimize-autoloader --no-dev
其中 --no-cache 是关键:它禁用本次所有缓存查找,确保每个包都重新下载;--prefer-dist 避免 git clone 开销;--no-dev 跳过开发依赖,大幅缩短解析时间。
绕过 SAT 回溯:用 why-not 定位阻断链
当 composer update 卡死在 SAT 阶段,说明存在隐式冲突。与其等它穷举,不如直接问谁在挡路:
- 想装某个包却失败?运行 composer why-not vendor/package:version
- 输出会逐层列出所有阻断项:可能是 laravel/framework 的 require,也可能是你根 composer.json 里的 conflict
- 若出现 your-project,说明是你自己写了硬性冲突,不是第三方问题
- require-dev 同样参与解析——比如 phpunit 要求 PHP 8.2,但项目只支持 7.4,也会卡死



















