Skip to content

Mermaid 图表

使用 Mermaid 在 Markdown 中绘制专业图表,无需图片编辑工具。

为什么使用 Mermaid?

  • 纯文本编写:代码即图表,版本可追踪
  • 多种图表:流程图、序列图、甘特图、类图、饼图等 20+ 类型
  • 主题适配:自动适配 VitePress 亮色/暗色模式
  • 维护方便:修改代码即可更新图表,无需重新导出图片

安装配置

安装插件

bash
npm install vitepress-plugin-mermaid mermaid -D

配置 VitePress

ts
// .vitepress/config.mts
import { withMermaid } from 'vitepress-plugin-mermaid'

export default withMermaid({
  // 你的 VitePress 配置
  themeConfig: {
    // ...
  },
  mermaid: {
    // Mermaid 配置(可选)
  }
})

注册 Mermaid 组件(可选)

如果需要在 Vue 组件中使用 Mermaid:

ts
// .vitepress/theme/index.ts
import DefaultTheme from 'vitepress/theme'
import { Mermaid } from 'vitepress-plugin-mermaid'

export default {
  extends: DefaultTheme,
  enhanceApp({ app }) {
    app.component('Mermaid', Mermaid)
  }
}

基础用法

在 Markdown 中使用 mermaid 代码块:

markdown
```mermaid
graph TD
    A[开始] --> B{判断条件}
    B -->|是| C[执行操作]
    B -->|否| D[结束]
    C --> D
```

渲染效果:

mermaid
graph TD
    A[开始] --> B{判断条件}
    B -->|是| C[执行操作]
    B -->|否| D[结束]
    C --> D

流程图

方向控制

关键字方向说明
TB从上到下默认
BT从下到上
LR从左到右
RL从右到左

节点形状

mermaid
graph TD
    A[矩形] --> B(圆角矩形)
    B --> C{菱形}
    C --> D[(数据库)]
    D --> E[[子程序]]
    E --> F[(圆柱体)]
    F --> G>旗帜]
markdown
A[矩形]          -- 默认形状
B(圆角矩形)      -- 圆角
C{菱形}          -- 判断/条件
D[(数据库)]       -- 数据库
E[[子程序]]       -- 子程序
F[(圆柱体)]       -- 圆柱
G>旗帜]           -- 旗帜

连线样式

mermaid
graph LR
    A -->|实线箭头| B
    B ---|实线无箭头| C
    C -.-|虚线| D
    D ==>|粗线| E
    E -- 文字标签 --> F

子图

mermaid
graph TB
    subgraph 前端
        A[Vue 组件] --> B[VitePress]
    end
    subgraph 构建
        C[Vite] --> D[Markdown]
    end
    B --> C

序列图

用于展示对象间的交互顺序:

mermaid
sequenceDiagram
    participant 用户
    participant 浏览器
    participant 服务器

    用户->>浏览器: 访问页面
    浏览器->>服务器: HTTP 请求
    服务器-->>浏览器: 返回 HTML
    浏览器-->>用户: 渲染页面

    Note right of 服务器: SSG 预渲染<br/>静态文件直接返回

消息类型

语法样式说明
->>实线箭头同步请求
-->>虚线箭头返回响应
--)实线无箭头异步消息
--)虚线无箭头异步返回

激活框

mermaid
sequenceDiagram
    participant Client
    participant Server

    Client->>Server: 请求
    activate Server
    Server-->>Client: 响应
    deactivate Server

甘特图

用于项目时间线规划:

mermaid
gantt
    title VitePress 项目计划
    dateFormat YYYY-MM-DD
    axisFormat %m/%d

    section 准备
    需求分析       :a1, 2026-01-01, 7d
    技术选型       :a2, after a1, 3d

    section 开发
    主题定制       :b1, after a2, 10d
    内容编写       :b2, after a2, 20d

    section 发布
    测试验收       :c1, after b1, 5d
    正式上线       :milestone, after c1, 0d

任务状态

markdown
任务名       :active, 2026-01-01, 7d     # 进行中
任务名       :done, 2026-01-01, 7d       # 已完成
任务名       :crit, 2026-01-01, 7d       # 关键任务
任务名       :milestone, 2026-01-15, 0d  # 里程碑

类图

用于展示系统架构和类关系:

mermaid
classDiagram
    class VitePress {
        +config: SiteConfig
        +theme: Theme
        +build(): Promise~void~
        +dev(): Promise~void~
    }

    class Theme {
        +Layout: Component
        +enhanceApp(): void
    }

    class SiteConfig {
        +title: string
        +description: string
        +themeConfig: ThemeConfig
    }

    VitePress --> Theme : 使用
    VitePress --> SiteConfig : 读取

饼图

mermaid
pie title VitePress 内容类型分布
    "入门指南" : 15
    "基础功能" : 25
    "主题定制" : 20
    "高级功能" : 25
    "实战案例" : 15

状态图

mermaid
stateDiagram-v2
    [*] --> 草稿
    草稿 --> 审核中: 提交审核
    审核中 --> 已发布: 审核通过
    审核中 --> 草稿: 驳回修改
    已发布 --> 草稿: 撤回
    已发布 --> [*]

ER 图

用于数据库关系建模:

mermaid
erDiagram
    ARTICLE ||--o{ COMMENT : has
    ARTICLE {
        string title
        string content
        date publishedAt
    }
    COMMENT {
        string content
        date createdAt
    }
    AUTHOR ||--o{ ARTICLE : writes
    AUTHOR {
        string name
        string email
    }

主题适配

亮色/暗色模式

VitePress 插件会自动根据当前主题切换 Mermaid 样式。如需自定义:

ts
// .vitepress/config.mts
export default withMermaid({
  mermaid: {
    theme: 'default'  // 'default' | 'dark' | 'forest' | 'neutral'
  }
})

CSS 变量覆盖

css
/* .vitepress/theme/styles/mermaid.css */
.mermaid {
  /* 图表字体 */
  font-family: var(--vp-font-family-base);
}

/* 节点样式 */
.mermaid .node rect {
  fill: var(--vp-c-brand-soft) !important;
  stroke: var(--vp-c-brand-1) !important;
}

在 Vue 组件中使用

vue
<script setup lang="ts">
import { Mermaid } from 'vitepress-plugin-mermaid'

const chart = `graph TD
    A[开始] --> B[结束]
`
</script>

<template>
  <Mermaid :value="chart" />
</template>

常见问题

图表不渲染?

  1. 确认已安装 vitepress-plugin-mermaidmermaid
  2. 确认配置使用了 withMermaid 包装
  3. 检查代码块语法是否正确

构建报错?

Mermaid 插件在 SSR 阶段可能出错,使用动态导入:

ts
// .vitepress/theme/index.ts
import DefaultTheme from 'vitepress/theme'

export default {
  extends: DefaultTheme,
  enhanceApp({ app }) {
    if (typeof window !== 'undefined') {
      import('vitepress-plugin-mermaid').then(({ Mermaid }) => {
        app.component('Mermaid', Mermaid)
      })
    }
  }
}

中文显示问题?

配置 Mermaid 使用支持中文的字体:

ts
export default withMermaid({
  mermaid: {
    themeVariables: {
      fontFamily: '"Inter", "Noto Sans SC", system-ui, sans-serif'
    }
  }
})

最佳实践

场景推荐图表说明
逻辑流程流程图 graph条件分支、循环
交互顺序序列图 sequenceDiagramAPI 调用、用户操作
时间规划甘特图 gantt项目排期
系统架构类图 classDiagram代码结构
数据占比饼图 pie分类统计
状态流转状态图 stateDiagram-v2工作流、生命周期
数据模型ER 图 erDiagram数据库设计

下一步

本章检查清单

0 / 8 已完成
0%
基础使用
图表类型
进阶技巧

贡献者

加载中...

想要成为贡献者?

在 CNB 上参与贡献