composer官方未实现composer graph或viz命令,运行必报“command not defined”;可行方案为:①用composer show --recursive --format=json导出数据+graphviz渲染,②安装第三方插件markuspoerschke/composer-dependency-graph直接生成html/png图。

composer graph 命令根本不存在
别再试 composer graph 或 composer viz 了,Composer 官方从没实现过这两个命令。运行后一定会报错:Command "graph" is not defined。这不是你环境没配好,是源码里压根没这功能。
真正能落地的方案只有两个:用 composer show --format=json 导出数据 + Graphviz 渲染;或者装第三方插件 markuspoerschke/composer-dependency-graph 直接出图。
用 composer show + Graphviz 手动生成 DOT 图
这是最可控的方式,适合 CI 脚本、需要定制样式或离线环境。关键不是“怎么画”,而是“怎么导出干净可渲染的数据”:
-
composer show --recursive --format=json才能拿到完整依赖树(不加--recursive只有直接依赖) - 输出里的
dev-master、self.version、dev-develop这类占位符必须过滤掉,否则dot会报语法错误 - 别用
composer show --tree的缩进文本去解析——它不是结构化格式,缩进层级易受描述长度干扰,脚本解析极易出错 - 确认系统已安装 Graphviz:
dot -V要能输出版本号;渲染命令形如:dot -Tpng composer-deps.dot -o deps.png
用 composer-dependency-graph 插件快速出 HTML/PNG
本地临时分析最省事:装完就能跑,自动处理 DOT 生成和调用,还带交互式 HTML 视图。
安装命令:composer global require markuspoerschke/composer-dependency-graph
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
常用操作:
- 生成 PNG:
composer graph --type=png - 生成可点击的 HTML:
composer graph --type=html - 排除 dev 依赖:
composer graph --no-dev - 只看某个包的依赖路径:
composer graph monolog/monolog
注意:插件默认读取当前项目下的 composer.lock,如果 lock 文件缺失或过期,图谱可能不准确。
为什么不能直接靠 composer.json 或 vendor 目录生成图谱
图谱的核心是「实际解析后的依赖关系」,不是声明或文件存在状态:
-
composer.json只写约束(如"^2.0"),不记录最终选中的版本和路径,无法还原真实依赖边 -
vendor/目录只反映“已安装”,但无法区分哪个包是因为 A 依赖 B 而被拉入,还是因为 C 显式 require —— 没有来源上下文,画不出有向边 - 只有
composer show --recursive --format=json或composer.lock包含完整的父子引用映射,且字段稳定(require字段明确列出子依赖名)
最容易被忽略的一点:循环依赖在 JSON 输出里会被截断或标记为 null,而 Graphviz 渲染时若未预处理,会导致图断裂或静默失败——生成前务必检查 JSON 中是否有 "require": null 或空对象。










