当前最稳定、无需插件的依赖树命令是composer show -t,它必须指定包名(如composer show -t .查项目自身),读取vendor/和composer.lock真实快照,而--tree和tree在2.5+已移除或不兼容。

现在能直接、稳定、不装插件就看到真实依赖树的命令,只有 composer show -t(短横线 -t),不是 --tree,也不是 composer tree。你如果输错,大概率会报 Unrecognized option "--tree" 或 Command "tree" is not defined——这不是你环境有问题,是命令本身在当前版本里不存在或已被移除。
composer show -t 是什么,为什么必须带包名
composer show -t 是 Composer 2.0+ 内置的依赖树查看命令,-t 是 --tree 的别名,但它**不接受空参数**。不指定包名就会报 Not enough arguments。
- 查整个项目的依赖结构:用
composer show -t .(点号代表当前项目) - 查某个已安装包的子树:如
composer show -t guzzlehttp/guzzle - 包名大小写敏感,
monolog/monolog写成Monolog/monolog就会提示Package not found - 如果输出只有一行(比如
your-project-name dev-main),说明vendor/空或composer.lock缺失,先跑composer install
为什么 composer show --tree 会报错
composer show --tree 在 Composer 2.5+ 已被彻底移除;2.2–2.4 之间它只是实验性支持,且默认关闭;2.0–2.1 虽有但极不稳定。你现在搜到的“composer show --tree 教程”,基本都来自 2024 年前的旧文档。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 运行
composer --version,若显示2.1.14或更低 → 升级:composer self-update - 若已是
2.5.8,再输--tree就是白费劲,它真没了 - 别信
composer tree—— 这是 2.2+ 才加的原生命令,但你的版本若低于 2.2,照样报错
查“谁依赖了我”该用哪个命令
想定位 psr/log 是被谁拉进来的,别用 composer depends。它是实验功能,默认关闭,遇到 provide 或本地 path 仓库时经常漏判。
- 干净可靠的是:
composer show --who psr/log,它直接读已安装包的require字段 - 只看生产环境依赖(排除
require-dev):composer show --who --no-dev psr/log - 如果结果为空,不代表没人用——可能是某个包通过
provide: "psr/log-implementation"虚拟提供,此时得回看composer show -t .全局结构
依赖树断在某一层,常见原因和对策
执行 composer show -t laravel/framework,结果停在 laravel/framework 就没了,没继续展开它的子依赖?这不是命令失效,是环境或配置卡住了。
-
ext-redis没启用 → 声明了但没装进vendor/,树里就看不到它及其下游 -
composer.lock被删或损坏 → 树无法还原真实快照,先composer update --lock - 用了
path类型仓库但路径不存在 → Composer 跳过该包,整条链断裂 - 想看清交叉引用(比如三个不同路径都引了
psr/log)?纯文本树已经不够,得上composer global require baethon/composer-graph+dot(graphviz)生成图谱
真正难的不是命令怎么输,而是理解输出里带 [v6.5.8] 的那个包,到底是你写的约束导致的,还是被别的包硬拖下来的——这时候 composer show -t 只是结果,composer why 和 composer prohibits 才是解法入口。

















