Composer 2.3 及更早版本无 depends 命令;2.4+ 需启用 experimental.show-depends 才可用;推荐用 composer show --format=json | jq 等稳定方式查反向依赖。

Composer 没有 depends 命令,composer depends 是 2.4+ 版本才引入的实验性功能,且默认不启用;想查某个包被谁依赖(即反向依赖),必须先启用该功能或换用更稳定的方式。
composer depends 命令为什么执行报错或提示未找到
在 Composer 2.3 及更早版本中,depends 根本不存在。2.4+ 虽加入,但需显式启用实验特性:
- 错误现象:
Command "depends" is not defined.或There are no commands defined in the "depends" namespace. - 原因:该命令属于
experimental功能集,默认关闭 - 启用方式:在项目根目录运行
composer config experimental.show-depends true - 注意:此配置仅对当前项目生效,全局启用需加
--global,但不推荐
查看「谁依赖了某个包」的可靠替代方案
不用依赖未稳功能,直接用内置命令 composer show 的反向查询能力:
-
composer show -t显示整个依赖树(正向),但无法直接定位反向关系 - 真正有效的做法是:
composer show --tree(Composer ≥2.5) - 更通用兼容的做法(所有 2.x 版本都支持):
composer depends—— 但前提是已启用实验功能 - 若仍失败,可临时用 shell 辅助:
composer show --format=json | jq -r '.packages[] | select(.require? | keys[]? == "
(需安装") | .name' jq)
composer show -t 和 composer depends 的关键区别
二者目的不同,不能混用:
-
composer show -t:从 root 出发,列出当前项目所有包及其子依赖(深度优先树),monolog/monolog出现在symfony/console下,不代表它只被 console 依赖 -
composer depends:只回答一个问题——哪些已安装包在自己的require中声明了该包(严格反向) - 性能差异:后者需遍历所有已安装包的
composer.json,比show -t略慢,尤其在大型项目中 - 结果可靠性:
depends不受 autoloader 或运行时 require 影响,只看静态声明,因此最准确
常见误用和边界情况
即使命令可用,结果也可能不符合预期:
- 包名必须完整、大小写敏感:
composer depends monolog/monolog✅,composer depends monolog❌ - dev-only 依赖默认不计入:如果某包只在
require-dev中被引用,depends默认不显示(除非加--all参数) - 本地路径仓库或
path类型 repo 可能不被识别,因其无远程composer.json元数据 - 使用
composer install --no-dev后,depends将完全忽略require-dev中的依赖关系
真正需要反向依赖时,别卡在命令是否存在上——先确认 Composer 版本,再决定是启用实验功能,还是用 show --format=json + 工具链处理。后者看似多一步,实则更可控、更少意外。










