卡在 Resolving dependencies 是 SAT 求解器暴力回溯导致的逻辑问题,非网络故障;卡在 Downloading 才是 HTTP 层超时,需调 http.timeout;卡在 Executing command 则属子进程挂起,应设 COMPOSER_PROCESS_TIMEOUT。
Composer命令没反应,不是“慢”,而是卡在某个具体环节——不看
输出,盲目清缓存、换镜像或调超时,基本白忙。
卡在 Resolving dependencies 是 SAT 求解器卡死,不是网络问题
这一行出现后长时间不动,CPU 持续拉高、内存缓慢上涨,说明 Composer 正在暴力回溯所有版本组合。它根本没发 HTTP 请求,
完全无效。
常见诱因:多个包 require 同一依赖的不同大版本(如
^5 和 ^6 并存)、用了
或
这类模糊约束、私有包引入循环依赖
快速确认:运行
,盯最后几行是否反复出现同一组包名嵌套(如
)
临时缓解:删掉
里的非核心工具(如
、
),再试;或加
跳过开发依赖解析
注意:autoload 配置太宽(比如扫描了整个
或
)也会拖慢求解——检查
是否超过 2MB
卡在 Downloading https://… 是 HTTP 层失败,
才管用
终端停在这一步,且后续无输出或报
、
,说明请求发出去了但没等到响应。此时
不参与,调它没意义。
先手动验证镜像:运行
,看是否返回
;若卡在
,是 DNS 问题;卡在
,可能是 OpenSSL 版本太老或企业代理证书未导入
设对位置:
(全局)或
(临时,推荐)
别忽略 PHP 自身限制:运行
,CLI 模式下若为 60,可临时绕过:
阿里云当前稳定地址是
,不是
结尾;腾讯云推荐用
卡在 Executing command 是子进程挂住,
或环境变量才起效
看到日志停在类似
或报
,说明包已下载完成,正在执行脚本、解压或
私有仓库。
Composer 2.9.6
Composer 2.9.6 是 PHP 生态中高效、稳定的依赖管理工具。此版本在性能与兼容性上进一步优化,改进了依赖解析算法,提升大型项目中的安装与更新速度。它支持并行下载任务,显著减少等待时间,并增强了与私有仓库及镜像源的交互稳定性。同时修复了多项命令行交互与内存使用相关的缺陷,确保在复杂依赖关系下依然可靠运行。无论是新项目初始化还是现有系统维护,Composer 2.9.6 都能为开发者提供流畅、精准的依赖管理体验。
下载
新版 Composer 已不读取
,必须用环境变量:
(Linux/macOS)或系统级 Windows 环境变量
常见卡点:私有 Git 仓库认证失败(SSH key 未加载、HTTPS 凭据过期)、WSL2 下 symlink 解析慢、APCu 未启用 CLI 模式、
权限异常
调试技巧:加
后重定向日志:
,再
快速聚焦
注意:如果
压根不输出,先查
是否被设为
,或
里写了不存在的扩展(如
)导致提前退出
日志不显示或被截断,很多错误根本看不到
默认的
或
只显示表层动作,真正卡死的地方——比如 SAT 求解器陷入回溯风暴、gzip 解码失败、插件抛出未捕获异常、cURL SSL 校验被静默中断——统统不会出现。
才会打印:完整 cURL 请求头与原始响应体(含未解压 JSON)、SAT 求解器每一步排除了哪个版本、临时文件路径、插件堆栈、扩展缺失提示(如
在
里写了但没装)
如果
不输出,优先排查三件事:
被设为
;
里写了不存在的扩展;Xdebug 干扰(加
再试)
脚本执行失败只显示
?因为 Composer 默认吞掉 stderr。必须用
才能看到真实错误,比如
或
Windows 下 cmd 可能截断树输出,换 PowerShell 或加
;
必须有有效的
才能实锤闭环链
最常被忽略的其实是卡点类型和参数作用域的错配——Resolving 是逻辑问题,Downloading 是 HTTP 问题,Executing 是子进程问题,每个环节对应的参数、排查手段和修复路径完全不同。盯着
最后几行,比任何经验都管用。
-vvvhttp.timeoutsymfony/consoledev-main*composer update --dry-run -vvendor/a → vendor/b → vendor/arequire-devphpstan/phpstaninfection/infection--no-devtests/examples/vendor/composer/autoload_classmap.phphttp.timeoutcURL error 28SSL operation failedprocess-timeoutcurl -I https://mirrors.aliyun.com/composer/packages.json200 OKResolving hostTLS handshakecomposer config -g http.timeout 600COMPOSER_HTTP_TIMEOUT=600 composer installphp -i | grep default_socket_timeoutphp -d default_socket_timeout=600 $(which composer) installhttps://mirrors.aliyun.com/composer//packages.jsonhttps://packagist.proxy.tencent.com/process-timeoutExecuting command (CWD: /path): git clone ...[RuntimeException] The process timed outgit clonecomposer config -g process-timeoutCOMPOSER_PROCESS_TIMEOUT=1200vendor/-vvvcomposer update -vvv 2>&1 | tee debug.loggrep -i "error\|exception\|failed\|zlib\|SAT" debug.log-vvvconfig.verbosefalseconfig.platform"ext-foobar": "1.0"-vvv-v-vv-vvvext-foobarconfig.platform-vvvconfig.verbosefalseconfig.platformCOMPOSER_DISABLE_XDEBUG=1Script failed-vvvFatal error: Uncaught Error:ParseError| morecomposer depends --treecomposer.lock-vvv