composer show -t . 是当前替代已失效的 --tree 参数的官方命令,需指定包名(如点号代表当前项目),且依赖 vendor 目录完整、composer.lock 有效及扩展启用;空输出通常因环境未就绪。

composer show --tree 已失效:先确认你的 Composer 版本
执行 composer show --tree 报错 Unrecognized option: --tree,不是你命令输错了,而是 Composer 版本太低或太高——这个参数在 2.2.0 引入,但在 2.2+ 某些小版本中被移除,到 2.5.0+ 彻底不可用(截至 2026 年初)。你现在看到的空输出、报错或静默忽略,大概率是因为这个。
- 运行
composer --version,如果输出是Composer version 2.1.14或更低 → 升级即可:composer self-update - 如果已是
2.5.0或更高(如2.5.8)→--tree确实没了,别再试了 - 当前最稳的替代命令是:
composer show -t(注意是短横线-t,不是--tree)
用 composer show -t 查看依赖树(正确写法+常见误用)
composer show -t 是 Composer 2.2+ 官方内置的树状视图命令,但它**不接受无参数调用**——直接敲 composer show -t 会报错 Not enough arguments。它必须指定一个包名,哪怕是当前项目自己。
- 查看整个项目的依赖树(等效旧版
--tree):composer show -t .(点号代表当前项目) - 只看某个包的子树,比如 Laravel 核心:
composer show -t laravel/framework - 想排除 dev 依赖?
composer show -t . --no-dev有效,但--no-dev必须放在最后 - 错误示范:
composer show -t --no-dev .→ 参数顺序错,会被忽略
为什么有时候树是空的?三个真实原因
即使用了 composer show -t .,也可能只显示一行项目名,下面没缩进、没依赖——这不是 bug,而是环境状态问题。
-
vendor/ 没装全:没运行过
composer install或composer update,show -t只读vendor/目录,不解析composer.json声明 -
锁文件缺失或损坏:
composer.lock不存在或格式异常,Composer 无法确定已安装包的真实版本和依赖路径 -
包被跳过安装:比如声明了
"ext-redis": "*"但本地没启用 redis 扩展,该包不会进vendor/,也不会出现在树里
复杂依赖要可视化?别硬扛命令行
当项目依赖超过 50 个包,或者你想看清 monolog 和 symfony/console 是怎么通过三个不同路径交叉引用同一个 psr/log 的时候,纯文本树已经不够用了。
- 轻量方案:
composer depends --tree monolog/monolog看谁在用它(反向树),比正向更易定位冲突源头 - 真正可视化:用社区工具
composer-dependency-graph,生成 SVG 或 PNG 图谱,支持过滤、高亮、导出 - 临时应急:用管道组合快速筛选,比如查所有含
http的依赖:composer show -t . 2>/dev/null | grep -E "(├|└) .*http"
树状结构本身不难,难的是它反映的是「此刻 vendor/ 的快照」,而不是「理论上能装什么」。很多人卡在第一步——没意识到 show -t 不是分析器,它只是个打印机。










