跳转至

Mermaid 图表语言

一句话说明: Mermaid 是一种基于文本的图表定义语言,用 Markdown 风格的代码即可生成流程图、序列图、甘特图、ER 图等专业图表。


为什么要学

  1. 代码即图表 — 用文本描述图表,可版本控制、可 diff、可 review
  2. GitHub/GitLab 原生支持 — 在 Markdown 中直接渲染,无需导出图片
  3. 覆盖常见图表类型 — 流程图、序列图、类图、甘特图、ER 图、状态图等全支持
  4. 零安装即可使用 — 大量在线编辑器和编辑器插件支持
  5. 团队协作友好 — 图表即代码,合并冲突易解决,评审可逐行讨论

核心概念详解

支持的图表类型

图表类型关键字典型用途
流程图flowchart / graph业务流程、决策树
序列图sequenceDiagramAPI 调用、消息交互
类图classDiagram面向对象设计
状态图stateDiagram-v2状态机、生命周期
ER 图erDiagram数据库设计
甘特图gantt项目计划、排期
饼图pie比例分布
Git 图gitGraph分支策略可视化
思维导图mindmap概念关系
时间线timeline事件记录

流程图节点形状

语法形状含义
A[文本]矩形处理步骤
A(文本)圆角矩形通用节点
A{文本}菱形判断/分支
A((文本))圆形起止点
A([文本])体育场形子流程
A[[文本]]双框矩形子程序
A[(文本)]圆柱体数据库

流程图连线

语法含义
A --> B带箭头实线
A --- B无箭头实线
A -.-> B带箭头虚线
A ==> B带箭头粗线
A -->|标签| B带标签连线

安装与配置

方式一:在线使用(零安装)

访问 Mermaid Live Editor 即可编辑预览。

方式二:VS Code 插件

code --install-extension bierner.markdown-mermaid

方式三:CLI 工具(导出图片/PDF)

npm install -g @mermaid-js/mermaid-cli

# 验证
mmdc --version

方式四:在项目中集成

npm install mermaid
<script type="module">
  import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs';
  mermaid.initialize({ startOnLoad: true });
</script>

快速上手

流程图

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

序列图

```mermaid
sequenceDiagram
    participant U as 用户
    participant S as 服务器
    participant DB as 数据库

    U->>S: 发送请求
    S->>DB: 查询数据
    DB-->>S: 返回结果
    S-->>U: 响应数据
```

ER 图

```mermaid
erDiagram
    USER ||--o{ ORDER : places
    ORDER ||--|{ LINE_ITEM : contains
    PRODUCT ||--o{ LINE_ITEM : "is in"

    USER {
        int id PK
        string name
        string email UK
    }
    ORDER {
        int id PK
        date created_at
        int user_id FK
    }
```

甘特图

```mermaid
gantt
    title 项目开发计划
    dateFormat YYYY-MM-DD
    section 设计阶段
    需求分析     :a1, 2024-01-01, 7d
    架构设计     :a2, after a1, 5d
    section 开发阶段
    后端开发     :b1, after a2, 14d
    前端开发     :b2, after a2, 14d
    section 测试阶段
    集成测试     :c1, after b1, 7d
```

进阶用法

1. 子图(Subgraph)

```mermaid
flowchart TB
    subgraph Frontend
        A[React App] --> B[API Client]
    end
    subgraph Backend
        C[FastAPI] --> D[Business Logic]
        D --> E[(PostgreSQL)]
    end
    B -->|HTTP| C
```

2. 序列图高级特性

```mermaid
sequenceDiagram
    autonumber
    participant C as Client
    participant G as Gateway
    participant S as Service

    C->>G: Request
    activate G
    G->>S: Forward
    activate S

    alt 成功
        S-->>G: 200 OK
        G-->>C: Response
    else 失败
        S-->>G: 500 Error
        G-->>C: Error Response
    end

    deactivate S
    deactivate G

    note over C,S: 重试机制
    loop 最多重试3次
        C->>G: Retry Request
    end
```

3. 状态图

```mermaid
stateDiagram-v2
    [*] --> Draft
    Draft --> Review: 提交审核
    Review --> Approved: 通过
    Review --> Draft: 驳回
    Approved --> Published: 发布
    Published --> Archived: 归档
    Archived --> [*]

    state Review {
        [*] --> PeerReview
        PeerReview --> LeaderReview
        LeaderReview --> [*]
    }
```

4. 主题与样式

```mermaid
%%{init: {'theme': 'forest'}}%%
flowchart LR
    A[Step 1] --> B[Step 2]
    style A fill:#f9f,stroke:#333
    style B fill:#bbf,stroke:#333
```

可选主题:default, dark, forest, neutral

5. CLI 批量导出

# 导出为 PNG
mmdc -i diagram.mmd -o diagram.png -t dark -w 1200

# 导出为 SVG
mmdc -i diagram.mmd -o diagram.svg

# 导出为 PDF
mmdc -i diagram.mmd -o diagram.pdf

6. Git 图

```mermaid
gitGraph
    commit
    commit
    branch feature
    checkout feature
    commit
    commit
    checkout main
    merge feature
    commit
```

常见问题与排错

Q: GitHub 中 Mermaid 不渲染

确保使用 ```mermaid 代码块标记,且仓库中无禁用渲染的设置。GitHub 从 2022 年起原生支持 Mermaid。

Q: 中文标签显示异常

在节点中使用引号包裹中文:

A["中文标签"] --> B["另一个中文"]

Q: 图表太大/太挤

%%{init: {'flowchart': {'nodeSpacing': 50, 'rankSpacing': 80}}}%%

Q: 特殊字符导致解析失败

在标签中转义特殊字符或使用引号:

A["包含 (括号) 的文本"]
B["含有 #hash 的文本"]

Q: 如何在 Notion/Obsidian 中使用

  • Obsidian — 原生支持 Mermaid 代码块
  • Notion — 使用 /code 块选择 Mermaid 语言

参考资源

  • 官方文档:https://mermaid.js.org/intro/
  • 在线编辑器:https://mermaid.live
  • GitHub 仓库:https://github.com/mermaid-js/mermaid
  • 语法速查:https://mermaid.js.org/syntax/flowchart.html
  • Mermaid CLI:https://github.com/mermaid-js/mermaid-cli
  • 集成列表:https://mermaid.js.org/ecosystem/integrations-community.html