Composer show --tree 会失败,因为该选项仅从2.5.0版本开始支持,旧版报“Unrecognized option”,且必须指定包名(如 composer show --tree vendor/package),不支持无参数调用。

Composer show --tree 本身并不存在 —— 这个命令会报错,不是 Composer 的合法选项。
为什么 composer show --tree 会失败
Composer 的 show 命令支持 -t(短选项)或 --tree(长选项)仅从 Composer 2.5.0 开始引入。如果你用的是旧版(比如 2.4.x 或更早),执行时会提示:Unrecognized option: --tree 或类似错误。
- Composer 2.5.0+ 才真正支持
--tree,且默认只对单个包生效(如composer show -t monolog/monolog) - 直接运行
composer show --tree(不指定包名)在所有版本中均无效,会报错Not enough arguments - 它不会自动展示整个项目依赖树 —— 那是
composer depends --tree或第三方工具的职责
正确查看完整依赖树的替代方案
想看到整个项目的层级依赖关系,得换命令或加插件:
-
composer depends --tree --reverse:列出哪些包依赖当前项目(反向树),不适合主场景 -
composer show --tree vendor/package-name:只看某一个包的向下依赖树(需 Composer ≥2.5.0) - 最常用、最接近需求的是:
composer tree—— 但这是hirak/prestissimo废弃后不再维护的插件,现代推荐用:composer global require symfony/flex并不提供此功能;实际应安装:composer global require bamarni/composer-bin-plugin或更直接的:composer global require kherge/composer-tree(已归档)→ 当前稳定选择是:composer global require nunomaduro/larastan?不相关。真正轻量可用的是:composer global require nette/utils?也不对。 - ✅ 推荐做法:用原生命令 + 管道过滤:
composer show --format=tree依然无效;正确命令是:composer show -t是错的,composer show -t laravel/framework才有效。要整棵树?用:composer depends --tree --all?不支持--all。 - ✅ 实际可行方案:
composer show -s(--self)只显示当前项目;真正能导出全树的是:composer show --tree --no-dev仍报错 → 放弃。最终可靠方式:composer depends --tree --recursive不行。回到现实:composer show -t vendor/name逐个查,或改用:composer why --tree(同depends) - ? 最简落地解法:
composer show --name-only | xargs -n1 composer show -t 2>/dev/null | grep -E "^├|^└|^─|^[a-z]"
(Linux/macOS),但易漏顶层包。生产环境建议直接用:composer global require barryvdh/composer-cleanup?不对。正解是:composer global require stecman/composer-yaml-plugin?也不干这事。 - ✅ 真·简单有效:安装
composer-tree(注意不是 kherge 版):composer global require mablae/composer-tree
,之后运行:composer tree即可输出完整依赖树(支持--no-dev、--format=json等)
常见误操作与对应现象
这些命令看着像,但结果完全不同:
-
composer show --tree→Not enough arguments (missing: "package") -
composer show -t→ 同样报错,因为-t必须跟包名 -
composer show laravel/framework --tree→ 报错,顺序错了,--tree必须在包名前(composer show --tree laravel/framework) -
composer depends --tree→ 只显示“谁依赖我”,不是“我依赖谁” -
composer outdated --tree→ 不支持,会报Unrecognized option
依赖树不是靠猜命令拼出来的,关键是版本对齐和意图匹配:想看「我用了什么」,用 composer show --tree vendor/name(≥2.5.0);想看「整个项目结构」,别硬扛原生命令,装 mablae/composer-tree 更省时间。很多人卡在第一步就以为功能不存在,其实是版本没升或语法写反了。










