Mermaid 图表语言¶
一句话说明: Mermaid 是一种基于文本的图表定义语言,用 Markdown 风格的代码即可生成流程图、序列图、甘特图、ER 图等专业图表。
为什么要学¶
- 代码即图表 — 用文本描述图表,可版本控制、可 diff、可 review
- GitHub/GitLab 原生支持 — 在 Markdown 中直接渲染,无需导出图片
- 覆盖常见图表类型 — 流程图、序列图、类图、甘特图、ER 图、状态图等全支持
- 零安装即可使用 — 大量在线编辑器和编辑器插件支持
- 团队协作友好 — 图表即代码,合并冲突易解决,评审可逐行讨论
核心概念详解¶
支持的图表类型¶
| 图表类型 | 关键字 | 典型用途 |
|---|---|---|
| 流程图 | flowchart / graph | 业务流程、决策树 |
| 序列图 | sequenceDiagram | API 调用、消息交互 |
| 类图 | 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 插件¶
方式三:CLI 工具(导出图片/PDF)¶
方式四:在项目中集成¶
<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: 中文标签显示异常¶
在节点中使用引号包裹中文:
Q: 图表太大/太挤¶
Q: 特殊字符导致解析失败¶
在标签中转义特殊字符或使用引号:
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