卡在resolving dependencies是sat求解器死循环,非网络问题;此时composer未发http请求,调http.timeout、换镜像、清缓存均无效,需用composer update --dry-run -v观察包名嵌套回溯并精简约束或删require-dev。

卡在 Resolving dependencies 是 SAT 求解器死循环,不是网络问题
这行日志出现后终端不动、CPU 拉高、内存缓慢上涨,说明 Composer 根本没发 HTTP 请求,纯粹在本地暴力回溯所有版本组合。调 http.timeout、换镜像、清缓存全无效。
- 常见诱因:
composer.json里同时 requiresymfony/console^5和^6;用了dev-main或*这类模糊约束;私有包引入循环依赖(如vendor/a → vendor/b → vendor/a) - 快速确认:运行
composer update --dry-run -v,盯最后几行是否反复出现同一组包名嵌套 - 临时缓解:删掉
require-dev里的非核心工具(如phpstan/phpstan),或加--no-dev跳过开发依赖解析 - 别忽略 autoload 影响:如果
vendor/composer/autoload_classmap.php超过 2MB,说明扫描路径太宽(比如含tests/或examples/),会拖慢求解
卡在 Downloading https://… 才是 HTTP 层超时,http.timeout 才起作用
看到这行后无输出,且后续报 cURL error 28 或 SSL operation failed,说明请求已发出但未收到响应。此时 process-timeout 完全不生效。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先手动验证镜像:运行
curl -I https://mirrors.aliyun.com/composer/packages.json,返回200 OK才算通;若卡在Resolving host,是 DNS 问题;卡在TLS handshake,可能是 OpenSSL 版本太老或企业代理证书未导入 - 设对位置:用
composer config -g http.timeout 600(全局)或COMPOSER_HTTP_TIMEOUT=600 composer install(临时,推荐) - PHP 自身限制也要检查:运行
php -i | grep default_socket_timeout,CLI 模式下若为 60,可临时绕过:php -d default_socket_timeout=600 $(which composer) install - 阿里云当前稳定地址是
https://mirrors.aliyun.com/composer/(结尾不带/packages.json);腾讯云推荐用https://packagist.proxy.tencent.com/
-vvv 不输出?先查这三处屏蔽点
-vvv 是唯一能暴露真实错误的开关,但它常被静默屏蔽——不先排查,其他操作全是白忙。
-
config.verbose被设为false:优先级高于命令行参数,运行composer config --list | grep verbose确认 -
config.platform里写了不存在的扩展(如"ext-foobar": "1.0"):Composer 在-vvv下会立刻报错退出,根本进不了依赖解析阶段 - Xdebug 干扰:加
COMPOSER_DISABLE_XDEBUG=1再试;否则堆栈可能被截断,你看到的Exception trace是假的 - 终端滚动太快?最可靠保存方式:
composer update -vvv 2>&1 | tee debug.log;之后用grep -i "error\|exception\|failed\|zlib\|SAT" debug.log快速聚焦
停在 Executing command 是子进程挂起,process-timeout 或环境变量才生效
看到日志停在类似 Executing command (CWD: /path): git clone 或报 [RuntimeException] The process timed out,说明包已下载完成,正在执行脚本、解压或 git clone 私有仓库。
- 这个阶段只有
process-timeout或COMPOSER_PROCESS_TIMEOUT生效,建议设为1200 - 某些插件(如
phpstan)会在安装时加载大量类,加--no-plugins可快速验证是否插件拖累 - 私有 Git 仓库若用 SSH 地址(
git@xxx),需确认ssh-agent已启动且 key 已添加,否则git clone会卡在密码提示 - WSL2 下若启用了元数据支持,
git clone可能因 symlink 解析卡住——关掉 WSL2 的metadata支持可验证
http.timeout,和 HTTP 卡住时调 process-timeout,本质都是往错误方向猛踩油门。真正关键的判断依据,永远是 -vvv 输出的最后一行。










