使用 composer install -vvv 可显示脚本执行的完整命令、环境变量及底层命令的原始 stderr 输出,从而暴露 fatal error、parseerror 等真实错误;-v 或 -vv 无法做到。

composer install 报错但只显示“Script failed”,怎么看到真实错误?
默认情况下 composer install 遇到脚本失败(比如 post-install-cmd 中的 PHP 命令崩溃),只会打印一行模糊提示,根本看不到 PHP 错误或堆栈。关键不是加日志,而是让 Composer 把底层命令的 stderr 原样透出。
- 直接加
-vvv:运行composer install -vvv,它会显示每条执行的脚本命令、完整环境变量、以及命令退出时的原始 stderr 输出 - 注意
-vvv不等于--verbose:只有三级详细模式(-vvv)才会捕获并展示子进程的错误输出;-v或-vv仍可能掩盖关键报错 - 如果脚本是 PHP 文件,常见真实错误其实是
Fatal error: Uncaught Error:或ParseError,这些只在-vvv下可见
composer update 卡住或超时,-vvv 能帮上什么忙?
-vvv 在网络操作阶段会逐行打印正在解析的包、HTTP 请求 URL、重定向路径和响应状态码,这对定位网络层问题非常直接。
- 你会看到类似
Downloading https://packagist.org/p2/monolog/monolog.json这样的请求,如果卡住,说明 DNS、代理或 packagist 访问异常 - 遇到
cURL error 28: Operation timed out,-vvv会明确标出是哪个包源地址超时,而非笼统说 “update failed” - 国内用户常因 HTTPS 证书校验失败被静默中断,
-vvv会暴露cURL error 60: SSL certificate problem,这时才知要配secure-http: false或更新 CA 包
为什么有时 -vvv 输出太多,反而找不到关键错误?
-vvv 的输出量极大,尤其含大量 JSON 解析、依赖树回溯和 HTTP header,真实错误容易被淹没在中间某行。这不是模式无效,而是需要配合过滤手段。
- 用
composer install -vvv 2>&1 | grep -A2 -B2 "error\|Error\|Fatal"快速定位带错误关键词的上下文 - 避免重定向到文件再手动翻:用
composer update -vvv 2>&1 | tee composer-debug.log,既实时看屏又留痕 - 特别注意 exit code:即使
-vvv最后显示 “Script terminated with exit code 255”,也要往上翻 10–20 行找真正触发它的那条命令和其 stderr
composer dump-autoload -vvv 有啥特殊价值?
这个命令本身不联网,但 -vvv 会列出所有被扫描的目录、匹配到的 psr-4 映射、以及每个 classmap 文件是否成功加载——这是排查 “Class not found” 最快的方式。
- 如果某个命名空间没生效,
-vvv会清楚显示 “Skipping /path/to/invalid/dir (no autoload config)” - 遇到
Cannot declare class X, because the name is already in use,-vvv会暴露出两个同名类被同时扫描到的具体路径 - 注意
autoload-dev是否被包含:默认dump-autoload不处理 dev 专用映射,加--dev才会显示相关路径扫描过程
-vvv 才强制捕获它。不加这三级参数,等于关掉了 Composer 的诊断探针。










