composer show --tree 可直观展示项目依赖树结构,需在含 composer.json 的根目录运行;支持指定包、排除 dev 依赖等变体,并可配合 why/depends/outdated 等命令定位冲突。

使用 composer show --tree 可以直观展示当前项目的完整依赖层级结构,帮你快速识别哪些包引入了哪些子依赖、是否存在重复或冲突版本。
确保已安装并处于项目根目录
该命令必须在包含 composer.json 的项目根目录下运行。如果提示 Command "show" is not defined,说明 Composer 版本过低(需 ≥ 2.0),请先升级:
composer self-update- 或下载最新版:https://getcomposer.org/download/
基础用法与常用变体
直接运行即可显示从顶级依赖向下展开的树状结构:
-
composer show --tree—— 显示所有已安装包的依赖树 -
composer show --tree vendor/package-name—— 只显示指定包及其依赖子树 -
composer show --tree --no-dev—— 排除开发依赖(如 phpunit、phpstan)
注意:不加参数时,默认只显示 require 中声明的包及其传递依赖,require-dev 中的包不会出现在主树里,除非被其他 require 包间接引用。
读懂输出格式的关键细节
每行代表一个包,缩进表示依赖层级。例如:
vendor/a 1.0.0└── vendor/b ^2.0
└── vendor/c 3.1.0
这表示:a 依赖 b(允许 2.x 版本),而 b 又依赖 c 的 3.1.0 版本。箭头旁的版本号是实际安装的版本,不是 composer.json 中写的约束表达式。
若看到同一包多个路径(如 c 被 a 和 d 分别引入),说明存在“多入口依赖”,可能带来版本冲突风险,可配合 composer why vendor/c 查看谁在引用它。
配合其他命令提升排查效率
单靠树状图有时不够,建议组合使用:
-
composer why vendor/package—— 查哪个包直接或间接依赖它 -
composer depends vendor/package—— 查哪些包依赖它(反向依赖) -
composer outdated --tree—— 显示可更新的包及其依赖影响范围
遇到版本冲突或无法升级时,先用 --tree 定位“是谁锁死了某个旧版本”,再针对性调整 composer.json 或加 --with-all-dependencies 参数重装。
基本上就这些。命令本身不复杂,但容易忽略 --no-dev 和精准包名过滤这两个关键选项,合理搭配能让依赖分析事半功倍。










