composer show --tree 是查看依赖树最直接的方式,但默认只显示顶层包依赖;需加 --all(Composer 2.5+)、--no-dev、--depth 等参数查看完整或受限依赖树,或用 composer depends 查反向依赖,支持 --direct/--dev 过滤,还可导出 txt/JSON 格式便于分析。

composer show --tree 是查看依赖树最直接的方式,但默认只显示顶层包的依赖。要完整梳理整个项目的依赖关系,得加点参数或换命令。
查看完整依赖树(含开发依赖)
执行 composer show --tree 会从 require 和 require-dev 两部分加载,但默认只展开第一层。加上 -t(即 --tree)还不够,需要显式指定根包或使用递归模式:
- 查全部依赖(含 dev):
composer show --tree --all - 只看运行时依赖(排除 dev):
composer show --tree --no-dev - 限制层级深度(防输出过长):
composer show --tree --depth=3
注意:--all 参数在 Composer 2.5+ 才支持;旧版本用 composer show -t 后手动翻页,或改用 composer depends --tree 反向查。
定位某个包被谁引用(反向依赖)
当想删掉一个包却不敢动,怕影响其他依赖时,composer depends 比 show 更有用:
- 查
monolog/monolog被哪些包直接或间接依赖:composer depends monolog/monolog - 只看直接依赖(不递归):
composer depends --direct monolog/monolog - 查某个包是否被
require-dev引用:composer depends --dev monolog/monolog
这个命令能快速识别“隐藏依赖”——比如某个测试工具被主项目没声明,却被另一个 dev 包拉了进来。
导出依赖树为文本或 JSON 方便分析
终端滚动太快?需要存档或写脚本处理?composer show 支持格式化输出:
- 生成可读性高的缩进树文本:
composer show --tree --format=txt > deps-tree.txt - 导出结构化 JSON(适合后续解析):
composer show --tree --format=json > deps.json - 过滤特定关键字(如只看 Laravel 相关):
composer show --tree | grep "laravel"
注意:--format=json 输出的是扁平列表而非嵌套树,真要树形 JSON 得自己解析 txt 输出或用第三方插件如 composer-visualize。
依赖树不是越深越好,有些包通过多层间接引入,版本冲突风险更高;--tree 默认不标出版本冲突,得配合 composer why-not 或 composer update --dry-run 交叉验证。真正难的不是看到依赖,而是判断哪一层该锁定、哪一层该升级。










