不能,composer show -t 默认只显示顶层包的直接依赖(等价于 --level=1),不展开递归层级;要看完整依赖树需用 composer show --tree(Composer ≥2.0)或配合 --level、--all 等参数。

composer show -t 能不能直接看到完整依赖树
不能,composer show -t 默认只显示顶层包的直接依赖,不展开递归层级。它本质是 composer show 的树状视图开关,但默认限制深度为 1,容易误以为“已经全展开了”。
真正要看完整依赖树,必须显式加 --tree 并配合 -l(即 --level)参数控制展开深度,或者用 --all 查看所有已安装包的依赖关系。
-
composer show -t:只显示 root 包的直接依赖(等价于composer show -t --level=1) -
composer show -t --level=5:展开到第 5 层,适合中等复杂项目 -
composer show --all --tree:列出所有已安装包及其各自依赖树,输出很长,但能发现“谁偷偷拉了某个旧版本”
为什么 composer depends 比 show -t 更适合排查冲突
当你遇到 Root composer.json requires xxx ^2.0, but xxx 1.9.5 is installed 这类报错时,composer show -t 往往找不到罪魁祸首——因为冲突包可能藏在某条深层依赖链里,而 composer depends 是反向追溯的。
它能告诉你“哪个包把 xxx 1.9.5 带进来的”,这才是定位问题的关键。
-
composer depends vendor/package-name:查谁依赖这个包(支持模糊匹配,如composer depends monolog) -
composer depends --tree vendor/package-name:带树状展示依赖路径,清楚看到“A → B → C → vendor/package-name” - 注意:如果包名没写全或大小写不对,会返回空,建议先用
composer show确认准确的 vendor/name 格式
执行时报 “Command ‘show’ is not defined” 怎么办
这是 Composer 2.x 之后的常见错觉:你用的是旧版 Composer(比如 1.x),而 --tree 和 --level 是 2.0+ 才引入的特性。运行 composer --version 看输出,如果是 Composer version 1.x,那 composer show -t 根本不识别 -t 参数,直接报错。
- 升级命令:
composer self-update(推荐)或php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"全新安装 - 临时替代方案(仅限 Composer 1.x):
composer show --installed --format=json | jq '.packages[].require'(需装 jq),但无法直观看树形 - 别信某些博客写的
composer depends -t——depends命令本身不支持-t,只有show支持--tree
依赖树太长刷屏看不清怎么办
终端一滚就没了,尤其 --all --tree 输出动辄上千行。别复制粘贴到编辑器里手动翻,用管道更稳:
-
composer show --all --tree | less -R:支持上下键、搜索(按/)、高亮 -
composer show -t --level=3 2>&1 | grep -i "monolog\|guzzle":过滤关键词,注意重定向 stderr(Composer 报错也走这里) - 想导出分析?
composer show --all --tree > deps-tree.txt,但注意文件里不含颜色,且大项目可能生成几百 MB
真正复杂的项目,靠人眼扫树是不可持续的;composer depends 定位源头 + composer why-not 验证版本兼容性,才是闭环动作。树只是快照,依赖关系是动态的,每次 composer update 都可能重排。











