加 -vvv 参数可显示完整错误堆栈和网络详情,配合 --no-cache 强制刷新远程数据;ssl 问题需检查 curl.cainfo 配置或设置 cafile;插件调试需启用对应环境变量如 composer_installers_debug=1。

composer install 或 update 卡住 / 报错但没具体信息
默认情况下 composer 会隐藏底层细节,尤其在依赖解析失败、网络超时或插件报错时,只显示一句模糊的 Failed to download vendor/package 或直接中断。这时候必须让 composer 吐出真实调用链和错误堆栈。
最直接有效的方式就是加 -vvv(三个 v),它等价于 --verbose --verbose --verbose,开启最高级别日志输出:
composer install -vvv
注意:不是 -v 或 -vv,这两个级别太低,往往仍看不到关键错误源;-vvv 才会打印 HTTP 请求头、JSON 响应体、未捕获异常的完整 trace、甚至 vendor 目录写入权限拒绝的具体系统错误码。
为什么 -vvv 有时还是没看到网络请求详情
因为 composer 默认复用已缓存的元数据(如 packages.json),跳过实际 HTTP 请求。如果你怀疑是镜像源或证书问题,得强制刷新远程数据:
-
composer clear-cache清掉本地缓存,避免误判 - 加
--no-cache参数绕过所有缓存逻辑,确保每一步都走真实网络 - 配合
-vvv使用:composer update --no-cache -vvv
常见现象:不加 --no-cache 时 -vvv 日志里压根不出现 GET https://packagist.org/packages.json 这类行 —— 它根本没发请求。
遇到 SSL certificate problem 怎么定位
这类错误在 -vvv 下通常出现在日志靠前位置,格式类似:
Failed to decode response: SSL certificate problem: unable to get local issuer certificate
说明 PHP cURL 模块找不到可信 CA 证书路径。这不是 Composer 本身的问题,而是运行环境缺失证书配置:
- 检查
php.ini中curl.cainfo是否指向有效的 PEM 文件(比如/etc/ssl/certs/ca-certificates.crt) - Windows 用户常见问题是 OpenSSL 配置路径错误,可临时用
composer config -g cafile "C:\path\to\cacert.pem"指定 - 不要用
composer config -g disable-tls true关 TLS —— 这只是掩盖问题,且新版 Packagist 已强制要求 HTTPS
调试插件或自定义 installer 时 -vvv 不够用
某些第三方插件(比如 hirak/prestissimo、composer/installers)内部逻辑不会被 -vvv 完全覆盖。如果问题出在安装阶段(如 Copying files... 卡死),需要额外打开插件自己的 debug 开关:
- 对
composer/installers,加环境变量:COMPOSER_INSTALLERS_DEBUG=1 composer install -vvv - 对
prestissimo,它本身已被弃用,但若仍在用,需设PRESTISSIMO_DEBUG=1 - 自研插件务必检查是否监听了
Event::SCRIPT_COMMAND类事件,并在代码中用$event->getIO()->writeError()输出调试信息
真正难搞的永远是那些不走标准 IO 接口、直接 echo 或静默失败的插件 —— 它们会让 -vvv 显得毫无作用。










