composer show --tree 本质是纯文本树而非可视化工具,仅靠缩进模拟层级,无颜色、交互或依赖类型区分;真正可视化需用 composer show --format=json --recursive 导出数据,转为 DOT 格式后由 Graphviz 渲染。

composer show --tree 本质是文本树,不是可视化工具
很多人以为 composer show --tree 能“可视化”依赖关系,其实它只是用缩进模拟树形结构的纯文本输出。它不带颜色、不支持折叠、没有节点交互、也不区分 require 和 require-dev——所有这些都得靠人眼数空格、grep 搜索、手动比对版本。终端宽度一窄,缩进换行错位,psr/log 可能被切成两行,星号(*)对不齐,你就容易误判“谁依赖了谁”。
想真正可视化,必须导出结构再渲染
可靠路径只有一条:用 composer show --format=json --recursive 拉出全量依赖数据,清洗后转成 DOT 格式,交给 Graphviz 渲染。关键动作有三个:
-
--recursive必须加,否则只返回 root 的直接依赖;但要注意循环依赖可能卡住进程 - JSON 中的
require和require-dev是分离字段,脚本里得显式过滤掉require-dev,否则phpunit拉进来的symfony/polyfill会污染生产视图 - DOT 文件里不能出现
dev-master、self.version或带斜杠的别名(如vendor/name[dev-feature]),否则dot直接报syntax error in line X
markuspoerschke/composer-dependency-graph 是最快落地方案
本地临时排查不用自己写转换脚本,装这个包就行:composer require --dev markuspoerschke/composer-dependency-graph。它自动完成三件事:提取 JSON、剔除非法标识符、调用 dot 渲染 HTML/PNG。命令简单:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
php vendor/bin/composer-dependency-graph --format=png --output=deps.png
注意两点:Graphviz 必须已安装(macOS 用 brew install graphviz,Ubuntu 用 apt install graphviz);生成的 PNG 是静态图,箭头方向默认从依赖方指向被依赖方,别反着读。
中文环境下的显示陷阱
中文包名或描述在 JSON 输出里是合法 UTF-8,但 DOT 渲染时容易乱码——Graphviz 默认不认 UTF-8 字体。解决办法不是改 Composer,而是给 dot 加参数:
dot -Tpng -Gfontname="SimSun" -Nfontname="SimSun" composer-deps.dot -o deps.png
其中 SimSun 是 Windows 系统常见中文字体,Linux/macOS 需换成系统实际存在的字体名(如 Noto Sans CJK SC)。漏掉这步,图里全是方框。另外,composer show --tree 在中文终端里缩进可能错位,建议固定终端宽度为 160 列以上,或始终搭配 less -S 使用。

















