composer show --tree 是当前唯一稳定、无需插件的依赖树命令,读取 vendor/ 和 composer.lock 的真实快照,需在含 composer.json 的项目根目录运行,低于 Composer 2.0 需先 self-update。

composer show --tree 是当前唯一稳定、无需插件的依赖树命令
别再搜 composer tree 或 composer show -t ——前者是 2.5+ 才内置的命令(且你大概率没装到这个版本),后者在 2.2+ 已被弃用,强行用会报错或只输出一行。你现在能无脑信任、不装插件、不改配置的方案,只有 composer show --tree。
- 它读的是
vendor/和composer.lock的真实快照,不是composer.json里写的“理想状态” - 必须在含
composer.json的项目根目录运行,否则提示No composer.json found或直接空输出 - Composer 版本低于 2.0?会报
Command "show" is not defined,先跑composer self-update - 不加包名就扫全量:几百行缩进,基本没法读;想查某包,直接跟上,比如
composer show --tree guzzlehttp/guzzle
查“谁用了这个包”,用 composer show --who,不是 composer depends
composer depends 是实验功能(2.4+ 默认关闭),遇到 provide、replace 或本地 path 仓库时容易漏判,而 composer show --who 直接从已安装包的 require 字段里翻,干净、确定、无歧义。
- 基础用法:
composer show --who psr/log,列出所有显式声明了它的已安装包 - 加
--no-dev过滤开发依赖:composer show --who --no-dev monolog/monolog - 它只显示“直接声明者”,比如 A → B → C,
--who只返回 B —— 这是设计,不是 bug - 如果结果为空,不代表没人用,可能是通过虚拟包间接提供,此时应回头看
composer show --tree全局结构
composer why --tree 才能真正定位到你自己写的那行 require
composer why monolog/monolog 默认只返回一级来源(比如 laravel/framework),但你真正想知道的是:“我自己的 composer.json 哪一行写了它?”这时候不加 --tree 就等于白查。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 正确姿势:
composer why --tree monolog/monolog,输出末尾出现your-project-name dev-main,才说明源头是你自己项目的require - 结尾带
[dev]?说明来自require-dev - 如果树在某一层中断(比如停在
laravel/framework就没了),大概率是它用了provide声明虚拟包,没继续向下解析 - 未安装的包也能溯源,加
--remote:composer why --remote --tree doctrine/orm
别忽略环境状态:vendor 空、lock 缺失、扩展未启用,都会让树“断掉”
composer show --tree 看起来没反应、输出极短、或者某包完全不出现?大概率不是命令错了,而是环境没就绪。
- 先确保运行过
composer install或composer update,vendor/目录存在且非空 -
composer.lock缺失?会直接报Could not find package或卡住 - 声明了
"ext-redis": "*"但本地没启用 redis 扩展?该包不会进vendor/,也不会出现在树里 -
--tree默认只展示require中的运行时依赖,require-dev里的包(如phpunit/phpunit)完全不出现 —— 要看它们,得加--dev
依赖树不是代码调用关系图,也不标红报错、不验证冲突,它只是当前 vendor 和 lock 的即时映射。看到多路径引入同一个包,才是你该打开 composer why-not 或 composer prohibits 的时候。

















