composer官方从未实现composer graph或composer viz命令,所有报错均因功能未内置;可靠方案仅有两类:一是安装markuspoerschke/composer-dependency-graph插件快速生成png/svg/html图,二是用composer show --format=json --recursive导出数据后结合graphviz渲染。

composer graph 命令根本不存在
别再试 composer graph 或 composer viz 了,这两个命令在任何 Composer 版本(包括最新的 2.9.6)里都报 Command "graph" is not defined。这不是你漏装插件、没配 PATH,是官方压根没实现这个功能。所有能出图的方案,都得靠第三方工具或手动导出数据 + 外部渲染。
真正能用的两类方案:插件 vs graphviz 脚本化
选哪个取决于你是否需要频繁生成、能否接受系统级依赖:
-
本地快速查看:推荐全局安装
markuspoerschke/composer-dependency-graph,它封装了 DOT 生成和dot调用逻辑,支持 PNG / SVG / HTML 三种输出 -
CI/CD 或脚本化集成:用
composer show --format=json --recursive导出结构,再用 Python/PHP 脚本转成 DOT,最后调用dot -Tpng渲染——可控性强,不依赖 PHP 插件生命周期 - 无论哪种,
graphviz是底层硬依赖:Mac 上brew install graphviz,Ubuntu/Debian 上apt install graphviz,验证用dot -V
私有镜像环境下必须显式传参
如果你项目用了 Satis 或 GitHub Packages 这类私有源,composer-dependency-graph 默认只连 packagist.org,不会读取 composer.json 里的 repositories 配置。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须加
--repository参数,且 URL 要和composer.json中完全一致(结尾斜杠不能少) - 若启用了 Basic Auth,
auth.json必须存在且权限为600,否则静默跳过认证 - 不支持多个
--repository;混合源场景需先合并成一个聚合镜像再喂给它 - 该工具只解析
vendor/composer/installed.json和远程packages.json元数据,不下载 dist 包,也不校验版本约束
图出来之后,重点盯这三处硬伤
可视化不是为了好看,是为快速定位真实运行风险:
- 箭头双向闭环(A → B → A)→ 实锤循环依赖,必须砍掉其中一端的
require - 同一包出现多个版本节点(如
guzzlehttp/guzzle:7.4和7.8并存)→ 版本冲突高发区,要立刻查composer why guzzlehttp/guzzle - 某包节点孤立无连接,但项目里又实际用了它的类 → 可能被
replace或provide隐藏,composer depends查不到,得结合phpdg做静态代码扫描
最常被忽略的是:图里显示的“已安装”结构,永远只反映当前 vendor/ 状态,和你配置的镜像源是否完整、composer.lock 是否过期、甚至 autoload 是否启用 classmap 优化,全无关系。










