composer 2.2–2.4用composer show --tree,2.5+必须用composer show -t .;命令依赖vendor和composer.lock真实快照,非composer.json声明,且包名大小写敏感、需已安装。

直接用 composer show --tree 或 composer show -t,取决于你的 Composer 版本——不是选哪个更高级,而是哪个能跑通。
为什么 composer show --tree 有时没输出或报错
这不是命令写错了,是环境没到位。它不读 composer.json 的“愿望”,只查 vendor/ 和 composer.lock 里“已经装进去”的真实快照:
-
vendor/目录必须存在且非空——没运行过composer install或composer update,命令就无从读取安装状态 -
composer.lock文件得有内容,否则无法还原已解析的依赖关系 - 包名必须精确:大小写敏感、
/不能省、vendor 名不能缩写(monolog/monolog≠monolog) - 如果包只在
require-dev里,又加了--no-dev,它自然不会出现
composer show -t 和 composer show --tree 到底用哪个
别猜版本兼容性,直接查:composer --version:
- Composer 2.2.0–2.4.x:优先用
composer show --tree(稳定、全版本支持) - Composer 2.5.0+:
--tree已被移除,必须改用composer show -t - 低于 2.0:会提示
Command "show" is not defined,先执行composer self-update
注意:composer tree 是另一个命令(2.2+ 引入),但它的输出格式和语义略有不同,且部分 CI 环境对 ANSI 颜色支持差;日常排查,show -t 或 show --tree 更直白可靠。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
查某个包的依赖树,但结果里看不到版本号
composer show --tree vendor/package-name 只显示包名和缩进层级,括号里的 [7.4.0] 或 [dev-master] 才是实际安装版本——它来自 composer.lock,不是你 composer.json 里写的约束:
- 看到
guzzlehttp/guzzle [6.5.8]但你写了"^7.0"?说明有其他包强制锁定了 v6,Composer 做了妥协 - 要确认该包具体版本,单独运行
composer show guzzlehttp/guzzle - 缩进深度代表声明层级:同一包出现在不同缩进,说明被多个上游分别引入;若版本不一致,就是潜在冲突源
想反向查“谁把我拉进来的”,别只靠 composer why
composer why monolog/monolog 默认只返回一级上游(比如 laravel/framework),但你真正需要的是“我自己的 composer.json 哪一行写了它?”:
- 必须加
--tree:运行composer why --tree monolog/monolog - 输出末尾出现
your-project-name dev-main,才说明源头是你自己项目的require - 结尾带
[dev],说明来自require-dev -
composer depends -r也能递归查上游,但它不显示路径深度,且在遇到provide或path类型仓库时容易漏判
依赖树不是静态快照,而是 Composer 解析约束后妥协出的结果;看到异常版本时,composer why 和 composer prohibits 比树本身更能定位根因。










