Composer官方未实现composer graph或viz命令,运行必报“Command not defined”;可行方案为:①用composer show --recursive --format=json导出数据+Graphviz渲染,②安装第三方插件markuspoerschke/composer-dependency-graph直接生成HTML/PNG图。
composer
graph 命令根本不存在
别再试
或
了,Composer 官方从没实现过这两个命令。运行后一定会报错:
。这不是你环境没配好,是源码里压根没这功能。
真正能落地的方案只有两个:用
导出数据 + Graphviz 渲染;或者装第三方插件
直接出图。
用 composer show + Graphviz 手动生成 DOT 图
这是最可控的方式,适合 CI 脚本、需要定制样式或离线环境。关键不是“怎么画”,而是“怎么导出干净可渲染的数据”:
才能拿到完整依赖树(不加
只有直接依赖)
输出里的
、
、
这类占位符必须过滤掉,否则
会报语法错误
别用
的缩进文本去解析——它不是结构化格式,缩进层级易受描述长度干扰,脚本解析极易出错
确认系统已安装 Graphviz:
要能输出版本号;渲染命令形如:
用 composer-dependency-graph 插件快速出 HTML/PNG
本地临时分析最省事:装完就能跑,自动处理 DOT 生成和调用,还带交互式 HTML 视图。
安装命令:
Composer 2.9.6
Composer 2.9.6 是 PHP 生态中高效、稳定的依赖管理工具。此版本在性能与兼容性上进一步优化,改进了依赖解析算法,提升大型项目中的安装与更新速度。它支持并行下载任务,显著减少等待时间,并增强了与私有仓库及镜像源的交互稳定性。同时修复了多项命令行交互与内存使用相关的缺陷,确保在复杂依赖关系下依然可靠运行。无论是新项目初始化还是现有系统维护,Composer 2.9.6 都能为开发者提供流畅、精准的依赖管理体验。
下载
常用操作:
生成 PNG:
生成可点击的 HTML:
排除 dev 依赖:
只看某个包的依赖路径:
注意:插件默认读取当前项目下的
,如果 lock 文件缺失或过期,图谱可能不准确。
为什么不能直接靠 composer.json 或 vendor 目录生成图谱
图谱的核心是「实际解析后的依赖关系」,不是声明或文件存在状态:
只写约束(如
),不记录最终选中的版本和路径,无法还原真实依赖边
目录只反映“已安装”,但无法区分哪个包是因为 A 依赖 B 而被拉入,还是因为 C 显式 require —— 没有来源上下文,画不出有向边
只有
或
包含完整的父子引用映射,且字段稳定(
字段明确列出子依赖名)
最容易被忽略的一点:循环依赖在 JSON 输出里会被截断或标记为
,而 Graphviz 渲染时若未预处理,会导致图断裂或静默失败——生成前务必检查 JSON 中是否有
或空对象。
composer graphcomposer vizCommand "graph" is not definedcomposer show --format=jsonmarkuspoerschke/composer-dependency-graphcomposer show --recursive --format=json--recursivedev-masterself.versiondev-developdotcomposer show --treedot -Vdot -Tpng composer-deps.dot -o deps.pngcomposer global require markuspoerschke/composer-dependency-graphcomposer graph --type=pngcomposer graph --type=htmlcomposer graph --no-devcomposer graph monolog/monologcomposer.lockcomposer.json"^2.0"vendor/composer show --recursive --format=jsoncomposer.lockrequirenull"require": null