composer why 是 Composer 2.2+ 内置的反向依赖命令,可直接查“谁依赖了某包”,无需安装插件;正向依赖用 composer show --tree,而 composer depends 并非官方命令,属第三方插件功能。

composer depends 命令查依赖关系
直接运行 composer depends 会报错:该命令不存在。Composer 官方并未提供 depends 子命令来反向查找“谁依赖了我”。你真正需要的是 composer show --tree 或 composer depends 的替代方案——但注意,depends 是社区插件功能,不是 Composer 内置命令。
用 composer show --tree 查看当前项目中某包的依赖树
这是最常用、无需额外安装的方式,适用于你想知道「A 包在当前项目里,依赖了哪些其他包」:
-
composer show --tree vendor/package-name显示该包及其所有递归依赖(向下依赖) - 例如:
composer show --tree monolog/monolog会列出 monolog 依赖的psr/log、php版本约束等 - 注意:它只反映当前
composer.lock中实际解析出的版本,不是理论上的composer.json全部可能组合 - 如果包未被安装(不在
vendor/或lock中),会提示 “Package not installed”
用 composer-require-checker 或 reverse-depends 插件查反向依赖(谁用了我)
如果你真正想问的是「当前项目里,有哪些包依赖了 vendor/package-name」,即反向依赖(who requires this?),得靠插件:
- 安装社区插件:
composer global require bamarni/composer-bin-plugin(可选),然后运行:composer global require proget-hq/composer-reverse-depends - 之后可用:
composer reverse-depends vendor/package-name - 或者更轻量:直接用
composer depends vendor/package-name—— 这是proget-hq/composer-reverse-depends注册的别名命令,前提是已安装该插件 - 不装插件时,只能手动 grep:
grep -r '"vendor/package-name"' composer.json vendor/*/composer.json 2>/dev/null,但结果不可靠(可能匹配到注释或路径)
为什么不能直接用 composer depends?
因为 Composer 核心命令集里压根没有 depends。你在文档或别人命令行里看到它,几乎肯定是启用了第三方插件。官方推荐的依赖分析方式始终是:
- 正向查(它依赖谁)→
composer show --tree - 反向查(谁依赖它)→ 需插件,或结合
composer show --installed+ 脚本过滤 - 检查冲突或冗余 →
composer why vendor/package-name(Composer 2.2+ 内置!这才是你真正该用的)
composer why 是 Composer 自带的反向依赖命令,比插件更可靠,且无需额外安装。例如:
composer why symfony/http-foundation会直接输出哪个顶层包(比如
symfony/framework-bundle)拉入了它,以及传递路径。
最容易被忽略的一点:很多人装了插件却忘了更新,导致 composer depends 报错“command not found”,其实只是插件没正确注册;而 composer why 是开箱即用的,只要 Composer ≥ 2.2 —— 检查版本用 composer --version,低于就先升级。










