composer depends 命令在 2.4+ 版本中为实验功能,默认关闭,需手动启用;推荐使用 composer why(支持 --tree)或 composer show --who 查依赖,结果基于 composer.lock,稳定可靠。

composer depends 命令根本不存在(除非你手动启用实验功能)
执行 composer depends monolog/monolog 报错 “Command ‘depends’ is not defined” 是正常的——Composer 官方在 2.3 及更早版本中压根没这个命令。它最早出现在 2.4+,但属于实验性功能,默认关闭。
- 想用
depends,必须先在项目根目录运行:composer config experimental.show-depends true - 该配置只对当前项目生效;加
--global全局启用不推荐,因实验功能可能随时变更或移除 - 即使启用了,
depends也只查「直接 require 了该包」的顶层包,不会递归显示 A→B→C 这类间接链路 - 它不区分
require和require-dev,也不告诉你约束版本(比如是"^2.0"还是"~1.8")
真正能用的原生命令是 composer why 和 composer show --who
composer why vendor/package-name 是最可靠、最常用的方式,它基于 composer.lock 回溯安装原因,结果稳定、语义清晰。
- 不加参数:只显示直接依赖者,例如
laravel/framework requires monolog/monolog (^2.0) - 加
--tree:展开完整依赖路径,看清它是怎么被“带进来”的:laravel/framework → symfony/console → psr/log → monolog/monolog -
composer show --who vendor/package-name(≥2.2)功能类似,但更精简,且不支持--tree,适合脚本快速提取包名 - 注意:
why和--who都只看已安装的包(vendor/+composer.lock),如果刚改完composer.json没install或update,结果会滞后
查不到?先确认三件事:包是否已安装、是否被声明、是否拼写正确
composer why 返回空,不代表没人用它——大概率是本地根本没装这个包,或者它只是某个包的 require-dev 依赖,而你当前没装开发依赖(比如忘了 --with-all-dependencies)。
- 运行
composer show看列表里有没有目标包;没有就先composer require vendor/package-name --dev或composer install - 检查
composer.json中的拼写:大小写、斜杠方向(monolog/monolog不是monolog\monolog)、有无多余空格 -
why不扫描测试文件或autoload-dev中的手动require,那些属于运行时逻辑,不在 Composer 依赖图内 - 若包被
replace或provides声明替代(如psr/log被symfony/polyfill-psr-log提供),why也不会显示原始引用者
需要跨项目查或批量分析?别硬扛,换工具
想查公司所有代码库中哪些项目还在用 guzzlehttp/guzzle:6.*,或者生成 HTML 依赖图谱——composer why 就力不从心了。
- 全局扫描:用 shell 脚本遍历项目目录,逐个执行
composer why guzzlehttp/guzzle 2>/dev/null | head -n1收集结果 - 结构化输出:配合
composer show --format=json | jq解析,比如提取所有 require 了某包的项目名 - 可视化依赖:装
composer global require graphp/graphviz+composer global require bamarni/composer-bin-plugin,再用composer-dependency-graph生成 SVG 图 - 深度审计:用社区插件
composer global require jakub-onderka/composer-depchecker,支持未使用包检测、HTML 报告、JSON 导出
依赖关系不是静态树,而是 SAT 求解器算出来的约束满足结果;看到的“谁依赖谁”,永远受限于当前 composer.lock 的快照和平台配置。别信直觉,多跑一遍 why --tree,再看一眼 composer.lock 里的 version 字段,比猜强得多。










