如何查看一个包依赖了哪些其他的Composer包? (depends命令)

15次阅读

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

如何查看一个包依赖了哪些其他的Composer包? (depends命令)

composer depends 命令查依赖关系

直接运行 composer depends 会报错:该命令不存在。Composer 官方并未提供 depends 子命令来反向查找“谁依赖了我”。你真正需要的是 composer show --treecomposer depends 的替代方案——但注意,depends 是社区插件功能,不是 Composer 内置命令。

用 composer show –tree 查看当前项目中某包的依赖树

这是最常用、无需额外安装的方式,适用于你想知道「A 包在当前项目里,依赖了哪些其他包」:

  • composer show --tree vendor/package-name 显示该包及其所有递归依赖(向下依赖)
  • 例如:composer show --tree monolog/monolog 会列出 monolog 依赖的 psr/logphp 版本约束等
  • 注意:它只反映当前 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,低于就先升级。

text=ZqhQzanResources