composer show -t是当前最稳的依赖树命令,必须指定包名(如composer show -t .查看整个项目),--tree已弃用;composer show --who查直接依赖者,composer why --tree溯源至自身require声明。

composer show -t 是当前最稳的依赖树命令,别再用 --tree
Composer 2.0+ 已将 --tree 别名统一为短参数 -t,而 composer show --tree 在 2.2+ 版本中已被弃用,强行使用会报错 Unrecognized option "--tree"。你现在能无脑执行、不装插件、不改配置的命令,只有 composer show -t。
它必须指定一个包名(哪怕是当前项目),否则会报 Not enough arguments:
-
composer show -t .:查看整个项目的完整依赖树(点号代表当前项目) -
composer show -t guzzlehttp/guzzle:只展开该包及其下游依赖 -
composer show -t --no-dev .:无效写法——--no-dev必须放在-t前面,正确是composer show --no-dev -t .
输出里带 [dev-master] 或 [7.8.1] 的括号内容,是你实际安装的版本,不是 composer.json 里写的约束;如果看到 v6.5.8 但你写了 "^7.0",说明有其他包强制降级了它。
查“谁依赖了这个包”,用 composer show --who,不是 depends
composer depends 是实验功能(2.4+ 默认关闭),开启后遇到 provide、replace 或本地 path 仓库时容易漏判。而 composer show --who psr/log 直接扫描所有已安装包的 require 和 require-dev 字段,干净、确定、不绕弯。
注意它只显示“直接声明者”:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- A → B → C,
composer show --who psr/log只列出 B,不会继续往上翻到 A - 加
--no-dev可过滤开发依赖:composer show --who --no-dev psr/log - 结果为空 ≠ 没人用 —— 可能是通过虚拟包(如
psr/log-implementation)间接提供,此时应回头看composer show -t .全局结构
想溯源到自己写的 require,必须加 --tree
composer why monolog/monolog 默认只返回一级来源(比如 laravel/framework),但你真正想知道的是:“我自己的 composer.json 哪一行写了它?”这时候不加 --tree 就等于白查。
正确姿势是:
-
composer why --tree monolog/monolog:输出末尾出现your-project-name dev-main,才说明源头在你自己的require - 若结尾带
[dev],说明来自require-dev - 如果树在某一层中断(比如停在
laravel/framework就没了),大概率是它用了provide声明虚拟包,没继续向下解析
纯文本树不够用?可视化得靠 dot + composer-graph
composer show -t 输出是纯文本,嵌套深了根本没法读。真正能看清交叉引用、冲突源头、调用链路的,是图形化方案:先装 baethon/composer-graph 插件,再跑 composer graph。
但前提是本地得有 dot 命令(由 Graphviz 提供),否则会报错 Dot command not found。常见坑:
- Mac 用户用 Homebrew 装:
brew install graphviz - Ubuntu/Debian:
sudo apt-get install graphviz - Windows 用户需手动下载 Graphviz 安装包,并把
dot.exe所在目录加进系统 PATH - 装完插件后首次运行
composer graph,默认生成dependency-graph.png,支持--format svg等选项
图形化不是银弹:它反映的是 composer.lock 快照,不是代码调用关系;如果你的 vendor/ 空或 composer.lock 缺失,图就画不出来——这恰恰是最容易被忽略的前置状态。

















