composer show -t是当前唯一稳定、无需插件的依赖树命令,读取vendor/和composer.lock真实快照,必须在项目根目录运行;composer show -t .查全量树,composer show -t pkg/name查指定包,--no-dev需置末尾,终端窄时可用| less -s横向查看。

composer show -t 是当前最稳的依赖树命令
别再试 composer show --tree,它在 Composer 2.5+ 已被移除;也别信 composer tree,那不是内置命令。你现在能无脑用、不装插件、不改配置的唯一可靠方案是 composer show -t(注意是短横线 -t,不是双横线)。
这个命令读的是 vendor/ 和 composer.lock 的真实快照,不是 composer.json 里写的“计划”。必须在含 composer.json 的项目根目录运行,否则直接报错或空输出。
-
composer show -t .:查看整个项目的依赖树(.表示当前项目) -
composer show -t guzzlehttp/guzzle:只看某个包及其下游依赖 -
composer show -t . --no-dev:排除开发依赖(--no-dev必须放最后) - 终端宽度不够?加
| less -S横向滚动:composer show -t . | less -S
查“谁在依赖某个包”用 composer show --who
composer depends 是实验功能,默认关闭,且对 provide、path 类型仓库支持差;composer why 默认只返回一级来源,容易误判。真正干净、确定、无需额外配置的是 composer show --who。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
composer show --who psr/log:列出所有显式声明了psr/log的已安装包 -
composer show --who --no-dev monolog/monolog:过滤掉开发依赖 - 它只显示“直接 require 者”,比如 A → B → C,
--who只返回 B —— 这是设计,不是 bug - 结果为空?可能是虚拟包(如
"provide": {"psr/log": "*"}),此时应回头跑composer show -t | grep -A2 -B2 "psr/log"
想溯源到自己项目那行 require,必须加 --tree
composer why monolog/monolog 可能只输出 laravel/framework,但你真正想知道的是:“我自己的 composer.json 哪一行写了它?”这时候不加 --tree 就等于白查。
-
composer why --tree monolog/monolog:输出完整路径,末尾出现your-project-name dev-main才说明源头是你自己 - 结尾带
[dev]?说明来自require-dev - 树在某一层中断(比如停在
symfony/console就没了)?大概率是它通过provide声明虚拟包,没继续向下解析 - 目标包未安装?加
--remote查 Packagist 上的声明:composer why --remote --tree doctrine/orm
常见空输出或报错,先核对这三件事
命令本身没问题,但环境状态不对就会“断树”。遇到空输出、Package not found 或静默忽略,优先检查:
-
vendor/目录是否为空?没运行过composer install或composer update,show -t就读不到任何东西 -
composer.lock是否存在且格式正常?损坏或缺失会导致依赖快照无法还原 - 包名是否拼错?
monolog/monolog不等于Monolog/monolog,斜杠不能省,大小写敏感;若只在require-dev里,又用了--no-dev,它自然不会出现
真正复杂的地方在于:Composer 的依赖解析是动态的,composer show -t 显示的是当前 vendor/ 和 composer.lock 的快照,不是 composer.json 里写的理想状态。一旦环境不一致,树就断得毫无征兆。










