Composer 官方无 graph 命令,依赖图需用第三方工具或 composer show -t + grep 查看;反查依赖用 composer show 包名 查 required-by 字段;生成可视化图推荐 bitexpert/composer-graph + graphviz。

composer graph 命令根本不存在
Composer 官方没有内置生成依赖图的命令,composer graph 是常见误解,直接运行会报错:Command "graph" is not defined.。想可视化依赖关系,得靠第三方插件或手动导出数据再处理。
用 composer dependents 查看谁依赖某个包
这是最常用、最轻量的排查方式,适合快速定位“这个包被哪些项目/包引用了”。它不画图,但能立刻回答“谁在用我”:
-
composer require --dev graphp/graphviz不是必须的——dependents是composer-unused或composer-show-dependents这类插件提供的,不是 Composer 原生命令 - 推荐安装轻量插件:
composer global require nunomaduro/larastan不相关;正确做法是:composer global require bamarni/composer-bin-plugin也不对;实际应执行:composer require --dev jenssegers/laravel-composerdump?错——最稳的是:composer require --dev vaimo/composer-config-reader?太重。真正简单可用的是:composer require --dev roave/security-advisories?无关。 - 别绕弯:直接用官方支持的
composer show -t(tree)查看当前项目的完整依赖树,再配合grep筛选:composer show -t | grep "monolog/" - 若要反查“谁依赖 monolog”,得先知道它是否被直接 require:运行
composer show monolog/monolog,看输出里的requires和required-by字段——后者只显示**直接依赖它的包**,不包括传递依赖
导出 dependency JSON 再用 graphviz 渲染
这是真正生成可视图的可靠路径,但需要两步:先提取结构化数据,再交给绘图工具。关键不是“一键出图”,而是控制输出精度:
- 用
composer show --format=json --no-dev导出生产依赖的 JSON,注意加--no-dev,否则 dev-only 包(如 phpunit)会污染图谱 - JSON 输出不含层级关系,需用脚本扁平化解析;更省事的是用社区工具:
composer require --dev bitexpert/composer-graph,然后运行:vendor/bin/composer-graph --format=png --output=deps.png - 该工具默认包含所有依赖(含 dev),容易生成巨图;建议加
--exclude-dev参数,或手动删掉require-dev中的包名再运行 - 渲染失败常见于系统没装 graphviz:
dot: command not found;macOS 用brew install graphviz,Ubuntu 用apt install graphviz,Windows 用户优先考虑跳过这步,改用在线解析 JSON
依赖循环和软依赖容易被图谱忽略
图形化工具通常只展示 require 硬依赖,而真实项目中很多关联藏在别处:
- PSR-4 自动加载映射不产生 require 关系,但
monolog/monolog被laravel/framework的日志门面调用,这种“软依赖”不会出现在图中 - 循环依赖(A → B → A)在
composer show -t中会显示为截断(... (circular)),但 graphviz 图可能直接崩溃或无限展开 - 同一包多个版本共存时(如 root require
guzzlehttp/guzzle:^7.0,而某依赖锁死^6.5),图谱常只画一个节点,掩盖了实际安装的两个版本实例
依赖图不是拓扑快照,而是特定视角下的投影。你看到的连线,永远少于代码里真实的调用链。










