用途:把 Mermaid 图表渲染成生产质量的 SVG、PNG、PDF,覆盖网页端与离线/命令行场景,并帮助在多种渲染方案间做选择。
核心限制:Mermaid.js 依赖浏览器 API(document.createElement、SVGTextElement.getBBox())计算文字尺寸,因此所有非浏览器渲染路径要么内嵌无头浏览器,要么重写渲染器。
网页渲染:推荐懒加载 mermaid.js,先检查页面是否存在 .mermaid 元素,仅在需要时加载约 480 KB 资源;需同时处理首次加载与 SPA 路由切换。也可用 @mermaid-js/tiny 预打包子集。构建期 SSR(Puppeteer/Playwright)会增加约 280 MB 依赖、每图约 2-3 秒,仅在严格零 JS 或数百图表时值得。
离线/CLI:官方 mermaid-cli 用无头 Chromium,支持 SVG/PNG/PDF,约 3000 ms/图,约 280 MB;安装 npm install -g @mermaid-js/mermaid-cli,用法 mmdc -i input.mmd -o output.svg。Kroki 是支持 25+ 语言的 HTTP 网关,适合多语言流水线。mmdr 为原生 Rust 实现,约 3 ms/图,安装 cargo install mmdr,用法 mmdr input.mmd -o output.svg,但仅覆盖 13 种图表类型,PDF 暂不支持。
限制与注意:mermaid-cli 输出的 SVG 含 foreignObject,在 Inkscape 等工具中可能无法打开,可设 "htmlLabels": false 或改导出 PNG;mmdr 部分特性尚未支持。本技能不用于编写 Mermaid 语法或渲染 PlantUML、GraphViz 等非 Mermaid 格式。