composer怎么查看某个包的依赖树_composer depends命令查询下游依赖【技巧】

10次阅读

composer原生查下游依赖唯一支持的是composer show –who(≥2.2版本),如composer show –who psr/log;旧版需升级,或使用depchecker插件获取递归路径等高级功能。

composer怎么查看某个包的依赖树_composer depends命令查询下游依赖【技巧】

Composer 没有直接查“下游依赖”(即谁依赖了某个包)的原生命令,composer depends 是个常见误解——它根本不存在。

为什么 composer depends 会报错

执行 composer depends monolog/monolog 会提示 Command "depends" is not defined。Composer 官方命令列表里从没提供过这个功能,所有声称可用的教程都是混淆了 composer show 的反向用法或依赖插件。

  • Composer 原生只支持 composer show --tree(查某包的上游依赖树)
  • composer show vendor/package 显示包信息,但不列出谁引用了它
  • 真正要查“谁用了这个包”,得靠 composer show --who 或第三方插件

正确查下游依赖:用 composer show --who

这是 Composer 2.2+ 内置的、唯一原生支持的下游查询方式,语法是:

composer show --who vendor/package-name

例如查谁依赖了 psr/log

composer show --who psr/log

输出类似:

monolog/monolog  2.9.0  requires  psr/log (^1.0 || ^2.0 || ^3.0) symfony/console  6.4.0  requires  psr/log (^1.0 || ^2.0 || ^3.0)
  • 仅显示直接依赖关系,不递归展开(比如 A → B → C,只显示 B 依赖 C,不显示 A 依赖 B)
  • 要求 Composer 版本 ≥ 2.2;旧版本需升级:composer self-update
  • 不区分 dev-dependency 和 require,一并列出

更完整的下游分析:用 depchecker 插件

如果需要递归、可视化或过滤(如只看生产环境依赖),推荐安装社区插件 depchecker

composer global require jakub-onderka/composer-depchecker

然后运行:

depchecker --package psr/log
  • 能列出间接依赖路径(A → B → C → psr/log)
  • 支持 jsON 输出、html 报告、未使用包检测等高级功能
  • 注意:全局安装后需确保 ~/.composer/vendor/bin 在系统 $PATH

容易忽略的关键点

下游依赖分析结果高度依赖当前 composer.lock 状态:

  • 如果某包只在 require-dev 中,但项目已运行 composer install --no-dev--who 就不会显示它
  • 私有包或 path repos 若未正确加载,也可能被漏掉
  • composer show --who 不检查 autoload-dev 或测试文件里的手动 require,那些属于运行时逻辑,不属于 Composer 依赖图

真要确认一个包是否被实际加载,得结合 composer dump-autoload -a 和代码扫描,不能只信依赖命令。

text=ZqhQzanResources