composer show --tree 是 Composer 官方唯一稳定、不依赖实验功能、基于 vendor/ 和 composer.lock 输出的依赖树命令,需在项目根目录运行,仅展示 require 中的包及其传递依赖,缩进表示层级关系。

composer show --tree 是唯一靠谱的依赖树命令
它不是“可选方案”,而是当前 Composer 官方唯一稳定、不依赖实验功能、基于真实 vendor/ 和 composer.lock 快照输出的命令。别被网上各种“composer tree”“composer depends”误导——前者只在 ≥2.5 才内置,后者在 2.4+ 默认禁用且语义混乱。
-
composer show --tree必须在含composer.json的项目根目录运行,否则输出为空或报错 - 它默认只展示
require中的包及其传递依赖;require-dev里的包不会出现,除非被某个生产依赖间接拉进来 - 缩进即层级:比如
guzzlehttp/guzzle下缩进显示psr/http-client,说明 Guzzle 明确 require 它;同一包在不同缩进出现,大概率是多路径引入,版本冲突高发区 - Composer 版本低于 2.0 会提示
Command "show" is not defined,需先执行composer self-update
查“谁用了这个包”?用 composer why,不是 depends
composer depends 在 2.3 及更早版本根本不存在;2.4+ 虽有但默认关闭,启用后也只查 require/require-dev 字面声明,漏掉 replace、provide、path 类型仓库等真实引用场景。而 composer why 基于 composer.lock 回溯安装原因,结果可靠。
-
composer why monolog/monolog:显示直接依赖者,例如laravel/framework requires monolog/monolog (^2.0) -
composer why -t monolog/monolog:展开完整路径,看清从root到目标包的每一步约束 - 如果
composer why返回空,先确认三件事:composer show monolog/monolog看是否已安装、composer.json拼写是否正确(注意斜杠不是反斜杠)、是否只是require-dev依赖而你没装开发包(可试composer install --with-all-dependencies)
查未安装包的依赖?加 --remote,别硬装再查
想评估一个包装进来会不会带一堆旧版组件?或者想绕过安装过程直接看它的依赖结构?--remote 就是为此设计的,它跳过本地 vendor/,直连 Packagist 获取元数据。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
-
composer show --remote --tree doctrine/orm:查远程doctrine/orm的完整依赖树 -
composer show --remote --tree --no-dev guzzlehttp/guzzle:排除开发依赖,专注运行时链路 - 注意:
--remote查不到本地path类型仓库或私有源中的包,那些得靠手动翻composer.json - 别用
composer show --tree不加包名去扫全量——动辄几百行,信息过载;精准定位某条支线,就加包名:composer show --tree --no-dev guzzlehttp/guzzle
依赖树不是终点,而是调试起点
看到树 ≠ 解决问题。真正卡住你的,往往是版本约束冲突、平台不匹配或隐式替换,而这些信息藏在树之外。
- 发现某包有多个版本共存?立刻接一句
composer why-not vendor/package version,验证升级是否可行 - 怀疑某个旧版组件被锁死?用
composer show --tree找到它的上游,再对那个上游运行composer why,逐层上溯 - 依赖树不等于代码调用关系——autoload 配置、classmap 优化、甚至文件同名覆盖,都可能让“树上存在”和“运行时加载”对不上号
最常被忽略的一点:很多“查不到依赖”的情况,其实是因为包被 replace 或 provide 替代了(比如 psr/log 被 symfony/polyfill-psr-log 提供),或者只存在于某个 path 类型仓库里,没有远程元数据。这时候,composer why 和 composer show --tree 的组合,比任何可视化工具都管用。










