Composer 必须用 -vvv 才能查看完整调试信息:-v 仅显示警告错误,-vv 增加普通信息,-vvv 才输出 cURL 请求、JSON 解析、依赖解析细节、插件钩子及脚本执行全过程。

Composer 默认不显示详细执行过程,想看到每一步在干什么、加载了哪些包、为什么卡住或失败,必须手动开启调试模式——不是 verbose 就够用,得用 -vvv(三重 verbose)才能看到完整调用链和 HTTP 请求细节。
为什么 -v 和 -vv 不够用?
Composer 的日志级别分三级:-v 只显示警告和错误;-vv 加上普通信息(如“Loading config”);只有 -vvv 才输出底层行为:cURL 请求头/体、JSON 解析过程、仓库元数据下载路径、插件钩子触发顺序、甚至 autoloader 生成时的文件扫描路径。
-
composer install -v:看不到为什么某个包没被选中 -
composer install -vv:能看到“Resolving dependencies”,但看不到具体约束冲突在哪条 require 上 -
composer install -vvv:会打印出每个 package 的require字段内容、版本匹配器(如^2.1)展开后的实际范围、以及 solver 回溯时丢弃的候选版本
遇到依赖解析卡住?先确认是不是网络或镜像问题
很多“卡在 Loading repository”的情况,其实是 Composer 在等 packagist.org 或配置的镜像响应超时,而默认超时是 300 秒且无提示。加 -vvv 后你会看到类似这样的输出:
Reading composer.json of myvendor/mypackage (dev-main) Downloading https://packagist.org/p2/myvendor/mypackage.json Failed to download myvendor/mypackage from dist: curl error 28 while downloading https://api.github.com/repos/myvendor/mypackage/zipball/...: Operation timed out after 300000 milliseconds with 0 bytes received
这时可以:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 检查
composer config repo.packagist.org.url是否指向了不可达的镜像(比如已下线的阿里云镜像) - 临时切回官方源:
composer config --global repo.packagist.org.url https://packagist.org - 加
--no-cache排除本地缓存损坏干扰
插件或脚本不执行?-vvv 能暴露钩子是否被跳过
某些自定义插件(如 hirak/prestissimo 或私有 post-install-cmd 脚本)在静默模式下失败也不会报错。启用 -vvv 后你会看到类似:
Running plugin Hirak\Prestissimo\Plugin::activate Plugin Hirak\Prestissimo\Plugin is not compatible with Composer 2.x, skipping.
或者:
Executing command (CWD): php ./scripts/post-install.php Command failed: php ./scripts/post-install.php [exit code 1]
关键点:
- 插件兼容性检测发生在命令早期,
-vvv会明确告诉你哪个插件被跳过及原因 - 脚本执行失败时,
-vvv会打印完整 exit code 和 stderr 输出,而-vv可能只写“Script failed” - 如果脚本本身也用了
exec()或shell_exec(),记得它内部的错误仍不会自动透出,需在脚本里加set -x或var_dump($output)
真正难排查的问题,往往藏在 -vvv 最后几百行里——比如某个私有包的 dist URL 拼错了导致反复重试,或者某次 composer update 触发了意外的插件钩子顺序。别省那几秒滚动时间。

















