composer show --tree 是 Composer 2.0+ 内置命令,用于以缩进文本形式展示依赖树;支持 --no-dev、指定包名等参数,但不支持 -tree;需确保 composer.lock 同步以保证准确性。

composer show -tree 不是标准命令,会报错
直接运行 composer show -tree 会提示 Command "show -tree" is not defined。Composer 的 show 命令本身不支持 -tree 这个参数,这是常见误解——很多人把旧版插件或第三方工具的用法当成了原生命令。
真正能画依赖树的是 composer show --tree
--tree(两个短横线)才是 Composer 内置的合法选项,从 Composer 2.0 起稳定支持。它按缩进层级展示当前项目所有已安装包及其依赖关系,本质是文本化树状图,不是图形界面,但足够清晰。
- 运行
composer show --tree查看全部依赖树(含 dev 依赖) - 加
--no-dev排除开发依赖:composer show --tree --no-dev - 指定某个包查它的子依赖:
composer show --tree monolog/monolog - 输出过长时可管道分页:
composer show --tree | less
为什么看不到“完整”树?有些包被省略了
Composer 默认只显示「直接安装」和「实际解析出的版本」,不会展开被版本约束跳过的候选包,也不会显示冲突未安装的包。比如 symfony/console 被多个包依赖,但只在第一次出现时展开其子树,后续同名包会被折叠 —— 这不是 bug,是避免重复和爆炸式输出的设计取舍。
- 想确认某包是否真的被加载,用
composer show symfony/console看具体版本和加载路径 - 发现某个依赖没出现在树里?先
composer install或composer update确保锁文件同步 -
composer show --tree不显示 require-dev 中未被主依赖链引用的包(例如只被 phpunit 间接需要的工具类)
需要图形化树?得靠外部工具
Composer 原生命令只输出文本树。真要可视化(比如导出 PNG、交互展开),得借助第三方工具,最常用的是 graphviz + composer-visualize 插件,但它需要额外安装且维护较弱;更轻量的做法是用 composer depends --tree 反向查谁依赖你,再配合 jq 和脚本生成 DOT 文件交给 dot 渲染 —— 实际项目中,90% 的诊断需求靠 composer show --tree 加关键词搜索就解决了。
别花时间折腾图形化,除非你在写文档或做培训。依赖树的核心价值是定位冲突、识别冗余、验证升级影响,这些文本树完全够用。真正容易被忽略的是:每次运行前确保 composer.lock 是最新状态,否则看到的树可能和实际部署环境不一致。










