composer show -t 必须指定包名(如 .),不支持无参数调用;--tree 已被移除,-t 需前置,缩进仅反映 require 声明层级,非运行时调用链。

composer show -t 必须指定包名,不加就报错
直接运行 composer show -t 会报 Not enough arguments —— 它从不接受“无参数”调用。哪怕你只想看整个项目,也得显式传 .(当前目录的占位符):composer show -t .。这个点号不能省,也不能换成 ./ 或空格,否则解析失败。
常见错误包括:
- 误以为
--tree还能用:Composer 2.5+ 已彻底移除该参数,用就报Unrecognized option "--tree" - 把
-t放在--no-dev后面:写成composer show -t --no-dev .会导致--no-dev被忽略,必须前置:composer show --no-dev -t . - 在 vendor 为空时执行:此时只输出项目名(如
your-project-name dev-main),后面没缩进——不是命令坏了,是根本没依赖可展
缩进 ≠ 加载顺序,只是 require 声明层级
composer show -t 的每一级缩进,只表示“谁在自己的 composer.json 的 require 字段里写了它”,和自动加载、类调用链、运行时行为完全无关。比如看到:
guzzlehttp/guzzle └── psr/http-client
说明 Guzzle 自己声明了 psr/http-client;但如果同一包在 2 级和 4 级都出现,大概率是被不同上游包分别引入,这时得查实际安装版本是否一致:composer show guzzlehttp/guzzle。
容易踩的坑:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 把缩进当“调用路径”:autoload 行为由
vendor/autoload.php中 classmap/PSR-4 注册顺序决定,跟树无关 - 看到重复就断定冲突:可能只是多路径最终解析到同一版本,得结合
composer.lock和composer show vendor/package确认 - 终端宽度太小导致换行错位:建议加
| less -S或重定向到文件:composer show -t . > deps.txt
精准聚焦某条依赖路径的参数组合
全量输出动辄上千行,不加过滤等于无效。关键不是“怎么展开”,而是“怎么收窄”:
- 查整个项目生产环境依赖链:
composer show --no-dev -t . - 只看某个包的下游依赖(比如排查 Guzzle 引入了啥):
composer show -t guzzlehttp/guzzle - 评估未安装包的潜在依赖(安装前预判):
composer show --remote -t monolog/monolog - 想确认是不是你自己写的 require:
composer why --tree monolog/monolog,末尾出现your-project-name dev-main才算溯源成功
注意:composer show -t 读的是 vendor/ 和 composer.lock 的真实快照,不是 composer.json 的理想状态——改了 JSON 没 update,树还是旧的。
超过 200 行或嵌套超 6 层时,文本树基本失效
纯文本缩进在深度嵌套时极易误读,这不是你眼花,是工具设计如此。当 composer show -t . 输出超过 200 行、同一包在 5+ 层反复出现、或需要判断多版本共存是否真冲突时,文本模式已失去分析价值。
这时候必须转向可视化:
- 装插件:
composer require baethon/composer-graph - 生成图:
composer graph(输出 dot 格式,配合 Graphviz 渲染) - 别依赖
composer depends:它是实验功能,默认关闭,遇到provide或path类型仓库时漏判严重
真正可靠的反向查法只有两个:composer show --who psr/log(谁直接 require 了它),和 composer why --tree(是否源自你自己的 composer.json)。其他所有“谁用了这个包”的变体,都绕不开这两个命令的组合验证。










