composer graph 命令非官方内置,需安装第三方包 baethon/composer-graph 并配置 graphviz 的 dot 命令;它基于 vendor/ 和 composer.lock 生成依赖图,不读取 composer.json,且不标注冲突,仅辅助定位间接依赖链。

composer graph 命令根本不存在,先装工具再画图
直接运行 composer graph 会报错 Command "graph" is not defined,这不是你打错了,是 Composer 官方没内置这个功能。它来自第三方包 baethon/composer-graph,必须手动安装。
装完还不能直接用:该工具依赖系统级的 dot 命令(Graphviz 渲染引擎)。缺了就会卡在 Dot command not found。
- macOS:运行
brew install graphviz(别只装 PHP 扩展) - Ubuntu/Debian:
sudo apt install graphviz - Windows:去 Graphviz 官网下载安装包,安装时务必勾选「Add Graphviz to the system PATH」
- 全局安装工具:
composer global require baethon/composer-graph,并确认~/.composer/vendor/bin在你的$PATH中
图只反映已安装结构,不是 composer.json 的声明
composer graph 不读 composer.json,它解析的是当前 vendor/ 目录和 composer.lock 的实际状态。如果刚初始化项目、还没跑过 composer install,图就画不出来,且不会报错,直接静默失败。
画图前务必确认两件事:
-
ls vendor/autoload.php能成功执行(说明vendor/存在且完整) -
composer validate通过(确保composer.json语法合法) - 若
vendor/曾被删过但composer.lock没更新,先运行composer update --lock同步锁文件
图里看不到冲突,但能暴露隐藏的间接依赖链
依赖图本身不标注冲突,但它能帮你定位“为什么某个包被锁在旧版”。比如你想升级 monolog/monolog,但图中显示它被 symfony/console → psr/log → monolog/monolog:1.25.0 这条路径固定住了,那问题大概率不在你写的 require,而在某层间接依赖写了硬约束。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
常用参数控制输出范围:
-
--no-dev:排除require-dev中的包(很多冲突其实来自测试工具链) -
--max-depth=2:限制图深度,避免树太深看不清主干 -
--filter="monolog":只显示含关键词的节点,快速聚焦
图太深时建议配合 grep:例如 composer graph --format=png | grep -A3 -B3 "monolog"(需先确认输出支持文本过滤)
真正定位冲突得靠 why-not 和 show --tree 配合看
图是辅助视觉化,但冲突定位不能只靠它。核心命令仍是 composer why-not 和 composer show --tree:
-
composer why-not monolog/monolog:^2.9:必须带完整包名+版本号,它会模拟安装失败过程,精准指出第一个卡住的包及其约束 -
composer show --tree monolog/monolog:展开整条依赖树,注意末尾带(locked to 1.25.0)的行——那是composer.lock固定的结果,删 lock 再update才可能松动 -
composer depends -r monolog/monolog:查谁在“拖后腿”,带requires的行才是真实约束来源;-r是关键,否则只显示直接依赖
图里看到的箭头关系,最终都要回到这些命令输出的版本约束符号上验证:比如 ^1.25 和 ~2.1.0 看似接近,但语义范围完全不重叠,这才是冲突真正的数学根源。










