Composer 官方不支持 composer depends 命令,截至2.7版该命令不存在;可靠替代是 composer show -t monolog/monolog 查直接父级,或手动分析 composer.lock 文件定位引入者。
Composer命令本身不支持直接查看“谁依赖了某个包”——它只在特定条件下可用,且常被误用。
默认安装的 Composer 并没有全局
子命令;你看到的多数教程或报错里提到的
,其实是
或第三方插件(如
旧版、
等)的混淆,或是 Composer 2.5+ 新增实验性功能的误传。
为什么
大概率报错或不存在
截至 Composer 2.7(2024 年最新稳定版),官方未将
列为内置命令。运行
通常会返回:
原因很直接:Composer 核心设计聚焦于「当前项目依赖什么」(
/
),而非反向查「谁引入了我」。反向依赖需扫描所有已安装包的
中的
字段,这在本地项目中意义有限,且无法覆盖 dev-only 依赖、平台包或冲突替换场景。
Composer 官方明确表示:反向依赖不是其核心职责,也不保证准确性
即使某些插件或自定义脚本提供
功能,它们通常只检查
下已安装包的
,漏掉未安装的 require-dev 包
私有包、VCS 包、path repos 等动态源不会被静态扫描识别
真正能用的替代方案:
和
的等效手动法
想确认
是被哪个包拉进来的,最可靠的方式是结合
输出与项目
分析:
:显示该包在当前依赖树中的位置(即「它被谁引入」),但仅限直接父级;如果输出为空,说明它可能是 root require 或被别名/replace 规则覆盖
打开
,搜索
,找到其
字段 —— 这里列出的是它的上游依赖,不是它的调用者
更实用的做法:
,配合人工比对
列表,定位哪个顶层包声明了它
例如,若
的
里写了
,而你项目中又 require 了
,那它就是源头——但这个关系不会被
自动推导出来,得靠你查源码或 lock 文件。
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
用脚本模拟
:快速定位直接引入者
如果你确实需要一个近似
的功能,可以写一行 shell 命令临时扫描:
它会列出所有在
中声明了
的包名(如
)。注意:
只查已安装包,跳过 require-dev 未启用的包
不能识别版本约束(比如
不会被匹配)
对 symlink 或 path repo 无效
更健壮的做法是解析
的
和
,再遍历每个包的
字段——但这已超出 CLI 一键范畴,属于定制化工具逻辑。
真正容易被忽略的点是:Composer 的依赖图本质是有向无环图(DAG),但「谁依赖谁」不是对称关系。一个包可能通过多条路径被引入,而
只显示其中一条(通常是解析时最先匹配的)。如果你在调试版本冲突,光看树形输出不够,得盯住
里的具体 version 和 source commit。
dependsdependscomposer dependscomposer show --treehirak/prestissimophpstan/extension-installercomposer dependsdependscomposer depends monolog/monologCommand "depends" is not defined.composer showcomposer treecomposer.jsonrequiredependsvendor/composer.jsoncomposer show -tcomposer dependsmonolog/monologcomposer showcomposer.lockcomposer show -t monolog/monologcomposer.lock"monolog/monolog"requirecomposer show --installed | grep -B5 -A5 monologrequirelaravel/frameworkcomposer.json"monolog/monolog": "^2.0"laravel/frameworkcomposerdependsdependsgrep -r '"monolog/monolog"' vendor/*/composer.json 2>/dev/null | cut -d/ -f2 | sort -uvendor/monolog/monologlaravel/framework"monolog/monolog": "dev-main as 2.0.0"composer.lockpackagespackages-devrequirecomposer show -tcomposer.lock