composer show 不加参数时只显示 composer.json 中 require 和 require-dev 明确声明的根依赖包(即已安装的顶层包),按包名排序,格式为 vendor/name version description,不包含任何子依赖,读取自 vendor/composer/installed.json。

直接说结论:用 composer show 查已安装包信息最稳,但必须分清“查谁”和“怎么查”——不加参数只看根依赖,加 -t 才能看树,--who 才能反查谁在用它;--tree 已失效,别再试。
composer show 不加参数时到底显示什么
它只读 vendor/composer/installed.json,列出当前项目中所有已安装的 根依赖(即 composer.json 里 require 和 require-dev 明确写的包),按包名排序,每行格式是 vendor/name version description。
- 不包含任何子依赖(比如
monolog/monolog依赖的psr/log不会出现在这里) - 如果
vendor/目录为空或没运行过composer install,会报错No composer.json found或Could not find package - 想只看包名列表?用
composer show --name-only(Composer 2.5+)或composer show | cut -d' ' -f1(Linux/macOS) - 注意大小写:包名
guzzlehttp/guzzle≠GuzzleHttp/Guzzle,输错就查不到
composer show -t 是查看依赖树的唯一可靠方式
--tree 参数早在 Composer 2.5.0+ 中已被移除,现在唯一稳定、无需插件、官方内置的树形命令是 composer show -t(短横线 -t,不是双横线)。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须指定包名:查整个项目就用
composer show -t .(点号代表当前项目) - 查某个包的下游依赖:如
composer show -t guzzlehttp/guzzle - 排除开发依赖:写成
composer show -t . --no-dev(--no-dev必须放在-t后面) - 输出里的
[7.8.1]或[dev-main]是实际安装版本,不是composer.json里写的约束;看到v6.5.8却写了"^7.0",说明有其他包强制降级了
composer show --who 查“谁在依赖这个包”
别用 composer depends——它是实验功能,默认关闭,遇到 provide 或本地仓库容易漏判。而 composer show --who 直接扫描所有已安装包的 require 字段,结果干净确定。
- 查谁直接依赖
psr/log:composer show --who psr/log - 只看生产环境依赖者:
composer show --who --no-dev psr/log - 它只返回“直接声明者”,比如 A → B → C,
--who只列 B;要看到 A,得配合composer show -t B往上翻 - 结果为空 ≠ 没人用——可能是某包通过
"provide": {"psr/log": "*"}虚拟提供,此时必须回composer show -t .全局扫一遍
常见报错和对应解法
几乎所有“查不到”问题都出在环境就绪度,而不是命令本身。
-
Command "show" is not defined→ Composer 版本低于 2.0,运行composer self-update -
Could not find package vendor/name→ 包名拼错(检查斜杠、大小写)、该包根本没装进vendor/(比如只在require-dev里但当前没装 dev 包) -
composer show -t .输出只有项目名、没缩进依赖 →vendor/为空或composer.lock缺失,先跑composer install - 想查未安装包的依赖结构?加
--remote:composer show --remote --tree monolog/monolog,但仅反映 Packagist 上的声明,不保证本地可装通
真正复杂的地方在于:Composer 的依赖解析是动态妥协的结果。composer show -t 显示的是 vendor/ 和 composer.lock 的快照,不是你 composer.json 里写的理想状态——看到旧版本,得先 composer why 再 composer prohibits,才能定位到具体哪条约束卡住了升级。

















