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

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 和代码扫描,不能只信依赖命令。










