composer depends 是 Composer 2.2+ 内置命令,用于反向查询某包被哪些顶级包直接依赖;默认仅检查 require 中的直接依赖,不包含 require-dev,加 --with-dependencies 可包含。

直接用 composer depends 就能查到——这是 Composer 2.2+ 内置命令,不需要额外插件,也不用手动翻 composer.lock。
查某个包被哪些顶级包直接依赖(最常用场景)
比如你想知道 monolog/monolog 是谁拉进来的,运行:
composer depends monolog/monolog
它只显示一级依赖者(即 require 里直接写了它的包),不展开递归。输出类似:
myapp/my-project symfony/framework-bundle
注意:这个命令默认只检查当前项目(root package)的 require,不会把 require-dev 里的包算作“顶级依赖”,除非你加 --with-dependencies。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 加
--tree可以看完整路径(但仍是单向正向树,不是反向) - 加
--recursive会递归查所有间接依赖者,但结果容易冗长,慎用 - 如果返回空,说明该包只在
require-dev中被引入,或已被优化移除(如通过replace或conflict)
为什么 composer show -t 不是反向追踪的正确工具
composer show -t vendor/package 显示的是「这个包依赖了谁」,也就是正向依赖树,和你要的完全相反。新手常误以为 -t 能倒查,结果越看越迷。
- 它输出的是
vendor/package → its dependencies,不是who requires vendor/package - 即使加上
--reverse(旧版 Composer 的非标准参数),也早已被废弃,新版不识别 - 想靠
composer depends的输出再人工逆推 require 线?别试了,composer.json里可能有别名、平台配置、条件 require,人工对不上
遇到 Command "depends" is not defined 怎么办
说明你的 Composer 版本太老(
composer show --tree | grep -B5 "your-package-name"
但这只是权宜之计,结果不可靠——因为 show --tree 默认从 root 开始展开,如果目标包在深层分支,grep 很可能漏掉父级上下文。
- 更稳的办法是临时升级:运行
composer self-update --2(确保是 2.x 最新版) - CI 环境中记得固定 Composer 版本,比如 GitHub Actions 用
composer-setup-php指定v2.5.8这类明确版本 - 别信某些博客说的
composer why——那是 Laravel Mix 或第三方插件的命令,不是 Composer 原生命令
真正难的不是查一次,而是当一个包被多个顶层包以不同版本要求引入时,composer depends 不告诉你冲突来源。这时候得配合 composer prohibits 和 composer show vendor/package --all 看版本约束细节。

















