composer update -vvv 输出的是最高级别(调试级)日志,包含HTTP请求细节、JSON解析过程、依赖图构建、包加载路径及插件钩子等完整执行流。

composer update -vvv 输出的是什么级别的日志
composer update -vvv 启用的是最详细的调试模式(verbose ×3),它会输出所有 HTTP 请求头/体、JSON 解析过程、包依赖图构建步骤、每个 composer.json 的加载路径,甚至包括未启用的插件钩子调用。这不是普通错误日志,而是 Composer 内部执行流的完整镜像。
常见错误如 Could not parse version constraint 或 Package x is not installable 在 -vvv 下会紧跟着显示触发该判断的具体 require 行、解析出的约束字符串、以及比对时的可用版本列表。
- 第一级
-v:只显示已安装/更新的包名和简略状态 - 第二级
-vv:增加依赖解析过程、远程仓库响应码(如200 OK或404 Not Found) - 第三级
-vvv:暴露底层 cURL 配置、packages.json文件实际 URL、JSON 解析异常堆栈
为什么 -vvv 日志里看不到真实网络错误
Composer 默认使用 PHP 的 stream_context 发起 HTTP 请求,而 -vvv 不会打印原始 socket 超时或 TLS 握手失败——它只在请求发出后才记录返回结果。所以你看到 Reading /packages.json from cache,但实际是缓存失效后请求卡死在 DNS 或 SSL 层。
这时需要配合系统级工具交叉验证:
- 运行
curl -v https://packagist.org/packages.json看是否能通 - 检查
openssl s_client -connect packagist.org:443是否握手成功 - 确认
composer config -g repo.packagist.org.url没被意外设为 http(非 https)
很多“-vvv 无报错但卡住”的情况,本质是 PHP cURL 扩展没报错,只是无限等待;-vvv 日志停在某行不动,就是信号。
如何从 -vvv 日志快速定位依赖冲突
当 composer update -vvv 报出 Conclusion: don't install packageA v1.2.3 类似信息,说明依赖求解器已穷举失败路径。关键不是看最后一行,而是往上翻到 Resolving dependencies through SAT 区块,那里有真实的冲突链。
示例中你会看到:
Resolving dependencies through SAT Looking at all rules. Something's changed, looking at all rules again (pass #1) Dependency resolution completed in 0.001 seconds Your requirements could not be resolved to an installable set of packages.Problem 1
- Root composer.json requires packageB ^2.0 -> satisfiable by packageB[2.0.0].
- packageB 2.0.0 requires packageC ^1.5 -> satisfiable by packageC[1.5.0, 1.5.1].
- packageC 1.5.1 conflicts with packageD[3.0.0].
- packageD 3.0.0 is required by root composer.json.
这个链条比
composer prohibits提示更直接。注意每行末尾的版本号和来源(root composer.json或具体包名),它们决定了谁该降级或排除。别忽略 vendor/composer/installed.json 和 lock 文件的隐式影响
composer update -vvv的行为受composer.lock和vendor/composer/installed.json双重影响。即使你删了vendor,只要lock文件存在,Composer 就会优先尝试复现其中的精确版本——哪怕这些版本早已从 Packagist 下架。调试时容易漏掉这点:
- 先运行
composer update --dry-run -vvv看是否仍走 lock 逻辑 - 对比
composer show packageX和cat vendor/composer/installed.json | grep packageX版本是否一致 - 若怀疑 lock 文件损坏,可临时重命名它再试
-vvv,观察日志中是否出现Generating rules(全新解析)而非Reading lock file
真正难缠的问题,往往藏在 lock 文件残留的已废弃分支约束里,而不是
composer.json本身。 - 先运行










