加 -vvv 可查看 composer 完整调试日志,输出 http 请求、依赖解析、脚本执行等细节,用于精准定位如 json 解析失败、网络拦截等深层问题,需配合 2>&1 | grep 过滤和 –no-ansi 适配 ci 环境。

composer install 或 update 时加 -vvv 就能看完整日志
默认情况下 composer install 或 composer update 只显示关键步骤和错误,-vvv 是最细粒度的调试开关,会输出所有 http 请求、包解析过程、依赖回溯、脚本执行细节。它不是“开启日志功能”,而是直接把内部调试信息刷到终端——没有配置文件、不需要改 composer.json。
-
-v:显示简要进度(如“Loading composer repositories”) -
-vv:加包名、版本号、命令执行路径等 -
-vvv:再加原始 HTTP 响应头、JSON 解析过程、锁文件字段比对、甚至 PHPproc_open调用参数
遇到 Failed to decode response 或 file could not be downloaded 时,-vvv 能定位真实失败点
这类错误表面是网络或权限问题,实际常卡在证书校验、代理转发、或私有仓库返回了非标准 JSON。开 -vvv 后你会看到具体哪一行 HTTP 请求卡住,比如:
Reading ./composer.json Loading config file ./composer.json Executing command (/path): git branch -a --format='%(refname:short)' Downloading https://packagist.org/packages.json Failed to decode response: json_decode() expects parameter 1 to be string, bool given
这时就能确认是 packages.json 下载后内容为空(false),而不是解析失败——接着查 DNS、HTTPS 中间件、或公司防火墙是否拦截了 packagist.org 的 SNI 请求。
-vvv 输出太多?用 2>&1 | grep 快速过滤关键词
全量日志动辄上万行,人工扫效率低。常见排查场景可组合管道过滤:
- 查某个包为什么没装:
composer update -vvv 2>&1 | grep "monolog" - 确认是否用了镜像源:
composer install -vvv 2>&1 | grep "https://mirrors.aliyun.com" - 看脚本执行顺序:
composer install -vvv 2>&1 | grep "Executing script"
注意必须写 2>&1,因为 Composer 把调试信息输出到 stderr,不重定向就 grep 不到。
某些环境(docker、CI)下 -vvv 日志可能被截断或丢失颜色控制符
终端宽度不足或 TERM 环境变量未设时,Composer 会自动降级输出格式,导致部分结构化日志变成扁平字符串。这不是 bug,是主动适配:
- CI 流水线中建议显式加
--no-ansi配合-vvv,避免 ANSI 转义符污染日志解析 - Docker 容器里运行前先执行
export TERM=xterm,否则某些嵌套调用(如post-install-cmd中的php命令)可能收不到完整调试上下文 -
-vvv本身不记录到文件,想持久化得自己重定向:composer update -vvv 2>&1 | tee debug.log
真正容易被忽略的是:当项目启用了 composer-plugin-api 自定义插件时,-vvv 仅显示插件注册过程,不进入插件内部逻辑——那部分得去插件源码里加 error_log() 或用 Xdebug。