composer depends 用于查看谁依赖某包,而非该包依赖谁;若无输出,说明无直接声明依赖,需用 composer show -t 查正向依赖或检查 installed.json 中的 replace/provides 字段。

composer depends 是查看某个包被哪些其他包依赖的命令,不是查它自己依赖了谁——这点容易搞反。
为什么 composer depends 查不到你预期的包?
常见错误是把方向弄反:它查的是「谁在用这个包」,而不是「这个包用了谁」。想查后者,该用 composer show --tree vendor/package 或 composer depends --tree(见下一条)。
- 如果执行
composer depends monolog/monolog没输出,说明当前项目里没有包显式声明依赖它(哪怕monolog实际被装上了,也可能是被其他包间接拉入的) - 它只检查
composer.json中的require和require-dev字段,不解析自动加载或运行时依赖 - 默认只显示直接依赖者;加上
--tree才展开层级
composer depends --tree 的实际效果和限制
加 --tree 后会尝试展示依赖链,但 Composer 本身不维护完整的反向依赖图谱,所以输出可能不完整或跳过某些路径。
- 输出结构类似:
myapp/myproject └── symfony/console (dev-main) └── monolog/monolog (2.10.0) - 注意:这里
symfony/console并不一定真的 requiremonolog/monolog,只是它在安装时把monolog拉进来了;depends --tree实际依赖的是 Composer 的锁文件解析逻辑,稳定性有限 - 若提示
Command "depends" is not defined,说明你用的是 Composer 1.x ——depends是 Composer 2.2+ 才引入的
替代方案:用 composer show -t 看正向依赖树
当你要确认一个包到底依赖了哪些东西,或者排查冲突来源时,composer show -t vendor/package 更可靠。
-
composer show -t guzzlehttp/guzzle会列出它所有递归依赖,包括版本约束 - 配合
grep快速定位:composer show -t | grep -A5 "psr/log" - 如果想看整个项目依赖图,直接
composer show -t(无参数),但输出可能很长,建议加less或重定向到文件
真正要查「谁在用某个包」时的实操建议
仅靠 composer depends 容易漏判,尤其在有 replace、provide 或 conflict 规则的包中。
- 先运行
composer depends --tree vendor/package获取基础线索 - 再检查
vendor/composer/installed.json,搜索目标包名,看replaced和provides字段是否被其他包声明覆盖 - 如果怀疑是开发依赖引入的,加
--dev参数:composer depends --dev vendor/package - 遇到私有包或未提交到 Packagist 的包,
depends可能完全不可见——此时只能手动翻composer.json文件
依赖关系不是静态快照,它随 composer.lock 和平台配置浮动;看到的结果,永远只是当前锁文件所固化的一条路径。










