composer graph 命令不存在,需用 composer show --tree 查依赖树或安装 composer-dependency-graph 配合 graphviz 生成可视化图谱。

composer graph 命令不存在,别白敲了
直接运行 composer graph 会报错:Command "graph" is not defined. —— 因为它根本不是 Composer 内置命令。你看到的教程或博客里写的这个命令,基本都依赖第三方插件,最常用的是 graphviz + composer-dependency-graph 或 phpstan/dependency-injection 的衍生工具,但主流方案其实是 roave/composer-dependency-analyzer 配合可视化导出,或者更轻量的 composer show --tree。
用 composer show --tree 看层级,够用且零依赖
这是 Composer 自带功能,不装插件、不配 Graphviz、不生成图片,但能清晰反映依赖嵌套结构,适合快速排查“谁拉了哪个版本的 monolog/monolog”这类问题。
-
composer show --tree:显示全部依赖树(含 dev 依赖) -
composer show --tree vendor/package:只看某个包的依赖路径,比如composer show --tree guzzlehttp/guzzle - 注意:如果某包被多个路径引入,
--tree只展示**第一次解析到的路径**,不会重复展开;想确认是否被多处引用,得配合composer depends vendor/package - 输出中缩进代表依赖层级,但不体现版本冲突——比如
A → B v1.0和C → B v2.0同时存在时,这里只会显示其中一个,实际安装结果取决于 Composer 的版本约束求解器
真要画图?用 composer-dependency-graph + dot(Graphviz)
需要可视化图谱(比如向同事解释为什么升级 symfony/console 会连带更新十几个包),就得上外部工具。最稳定可用的是 composer-dependency-graph:
- 先全局安装:
composer global require bitexpert/composer-dependency-graph - 确保系统已安装
dot(Graphviz 的命令行工具),macOS 用brew install graphviz,Ubuntu 用apt install graphviz - 生成 PNG:
composer-dependency-graph --format=png --output=deps.png - 常见坑:
dot默认对节点数有限制,大型项目容易报error: node too large,可加参数--graph-attributes="size=10,10!"缩小图幅,或改用--format=svg避开渲染限制 - 生成的图里,箭头方向是「依赖指向被依赖」,即
A → B表示 A requires B;但箭头粗细/颜色不表示强度或版本关系,纯拓扑结构
依赖层级深 ≠ 一定有问题,但得盯住“非直系”传递依赖
Composer 的自动扁平化(flattening)机制会让很多传递依赖被提升到根目录,composer show --tree 显示的层级未必等于 vendor/ 里的实际目录结构。真正危险的是那些没被提升、又没被显式声明的“深层嵌套依赖”,比如:
- 你的
composer.json没写"monolog/monolog": "^3.0",但某个 v2.x 的package-a拉了monolog/monolog: ^2.9,而你又用了 monolog v3 的新 API —— 运行时报Class not found或Method not exist - 两个不同包分别要求
psr/log的^1.0和^2.0,Composer 通常能兼容,但如果其中一方用了psr/logv2 特有的接口(如LoggerInterface::log()的第三个参数),v1 的实现就挂了 - 用
composer why-not vendor/package:version检查某个版本为何无法安装,比硬看树更直接
依赖图越复杂,手动验证成本越高;与其纠结图形是否好看,不如定期跑 composer outdated + composer validate,再重点 review composer.lock 里变化的传递依赖段。










