composer show --tree 以缩进树状结构展示项目依赖关系,顶行是直接依赖,缩进层级表示依赖深度,包名后为版本约束,括号内提示冲突、替换或引用来源,需结合 composer depends 和 show 命令交叉验证。

composer show --tree 命令以缩进树状结构展示当前项目的依赖关系,帮你直观看到每个包引入了哪些子依赖、是否存在重复或冲突版本。关键看缩进层级、包名后的版本号,以及括号里的提示信息(比如 required by 或 conflict)。
缩进层级 = 依赖深度
每级缩进代表一层依赖调用关系:
- 顶行(无缩进)是你项目直接 require 的包,例如 monolog/monolog v2.13.0
- 下一级缩进(如 2 个空格)是它直接依赖的包,例如 psr/log ^1.0 || ^2.0
- 再下一级是你项目中某个包所依赖的包所依赖的包——依此类推
版本号和约束符要细看
包名后紧跟的不是固定版本,而是该包声明的版本约束(来自其 composer.json 的 require 字段):
- guzzlehttp/guzzle ^7.2 表示“接受 7.2.x 及更高但低于 8.0 的版本”
- php >=7.2.5 表示对 PHP 环境的要求,不是安装的扩展包
- 如果某包后面写着 (required by myapp/mylib),说明它是被 myapp/mylib 显式 require 的
注意冲突与覆盖标记
输出中可能出现带括号的提示,揭示潜在问题:
- symfony/console v5.4.32 (conflict with symfony/console[v6.0.0]):表示当前解析出的版本与另一个已加载的版本冲突
- laravel/framework v9.52.15 (replaces illuminate/support):说明它提供了被替换的包功能
- 同一包在不同层级出现多次?说明多个父包都依赖它,Composer 会尽量复用一个兼容版本
配合其他命令交叉验证
单看 tree 不够,建议组合使用:
- composer show monolog/monolog 查看该包自身的元信息和 require 列表
- composer depends psr/log 查谁依赖了 psr/log,定位“是谁拉进来的”
- composer why-not php:8.3 检查为什么不能升级到某个 PHP 版本
基本上就这些。树形输出不复杂但容易忽略缩进含义和括号提示,多看两遍、结合 depends 和 show 验证,就能快速理清依赖脉络。










