Mermaid 入门指南:快速看懂基本语法并修改代码
从流程图、时序图、类图、状态图和实体关系图入手,掌握 Mermaid 的基本语法、修改方法与常见报错排查。
Mermaid 入门指南:快速看懂基本语法并修改代码
Mermaid 使用文本描述流程图、时序图、类图、状态图和实体关系图。阅读代码时,重点关注:
- 第一行:图表类型和方向。
- 节点 ID:例如
A、B、User。 - 节点标签:例如
A[开始]中的“开始”。 - 连接关系:例如
A --> B。 - 代码块结构:例如
subgraph、alt、loop对应的end。
本文中每个示例都分成两部分:
- “源码”:使用
text代码块,方便查看和复制语法。 - “预览”:使用
mermaid代码块,查看渲染效果。
1. Mermaid 代码的基本结构
源码
flowchart LR
A[开始] --> B[处理任务]
预览
flowchart LR
A[开始] --> B[处理任务]
这段代码可以拆成四部分:
| 代码 | 含义 |
|---|---|
flowchart | 图表类型,这里是流程图 |
LR | 从左到右排列 |
A[开始] | ID 是 A,显示文字是“开始” |
--> | 带箭头的连接线 |
常见图表类型包括:
| 开头 | 适合描述 |
|---|---|
flowchart | 流程、判断、系统结构 |
sequenceDiagram | 用户、服务之间的调用顺序 |
classDiagram | 类、属性、方法和类之间的关系 |
stateDiagram-v2 | 状态变化 |
erDiagram | 数据库实体关系 |
mindmap | 思维导图 |
2. 流程图
流程图由节点和连接线组成,官方文档支持多种方向、节点形状和连接方式。Mermaid Flowchart 官方文档
2.1 设置方向
源码
flowchart TD
A[开始] --> B[结束]
预览
flowchart TD
A[开始] --> B[结束]
常见方向:
| 写法 | 含义 |
|---|---|
TD 或 TB | 从上到下 |
LR | 从左到右 |
RL | 从右到左 |
BT | 从下到上 |
修改方向时,只需要修改第一行:
源码
flowchart LR
A[开始] --> B[结束]
预览
flowchart LR
A[开始] --> B[结束]
2.2 常见节点形状
源码
flowchart LR
A[处理数据]
B(开始)
C{是否成功?}
D((连接点))
E[(数据库)]
F[/用户输入/]
预览
flowchart LR
A[处理数据]
B(开始)
C{是否成功?}
D((连接点))
E[(数据库)]
F[/用户输入/]
常用写法:
| 写法 | 图形 | 常见用途 |
|---|---|---|
A[文本] | 矩形 | 普通步骤 |
A(文本) | 圆角矩形 | 开始、结束 |
A{文本} | 菱形 | 条件判断 |
A((文本)) | 圆形 | 起点、连接点 |
A[(文本)] | 圆柱 | 数据库 |
A[/文本/] | 平行四边形 | 输入、输出 |
2.3 连接线和分支
源码
flowchart TD
Start([开始]) --> Submit[提交表单]
Submit --> Check{校验通过?}
Check -->|是| Save[(保存数据)]
Check -->|否| Error[显示错误]
预览
flowchart TD
Start([开始]) --> Submit[提交表单]
Submit --> Check{校验通过?}
Check -->|是| Save[(保存数据)]
Check -->|否| Error[显示错误]
常见连接线:
| 写法 | 含义 |
|---|---|
A --> B | 带箭头的实线 |
A --- B | 无箭头的实线 |
A -.-> B | 虚线箭头 |
A ==> B | 粗线箭头 |
| `A —> | 通过 |
2.4 子图
subgraph 可以把多个节点分成一个区域。
源码
flowchart LR
subgraph 前端
Page[页面]
Form[表单]
Page --> Form
end
subgraph 后端
API[接口]
DB[(数据库)]
API --> DB
end
Form --> API
预览
flowchart LR
subgraph 前端
Page[页面]
Form[表单]
Page --> Form
end
subgraph 后端
API[接口]
DB[(数据库)]
API --> DB
end
Form --> API
subgraph 必须使用 end 结束。
3. 时序图
时序图用于表示多个参与者之间按时间发生的交互。Mermaid Sequence Diagram 官方文档
源码
sequenceDiagram
participant User as 用户
participant App as 应用
participant API as 接口
User->>App: 点击登录
App->>API: 发送账号密码
API-->>App: 返回登录结果
App-->>User: 显示首页
预览
sequenceDiagram
participant User as 用户
participant App as 应用
participant API as 接口
User->>App: 点击登录
App->>API: 发送账号密码
API-->>App: 返回登录结果
App-->>User: 显示首页
阅读时重点看:
participant:参与者。A->>B:A 调用 B。B-->>A:B 返回给 A。- 冒号后面的文字:消息内容。
- 代码从上到下:调用顺序。
3.1 条件分支和循环
源码
sequenceDiagram
participant User as 用户
participant API as 接口
User->>API: 提交登录请求
alt 登录成功
API-->>User: 返回令牌
else 登录失败
API-->>User: 返回错误信息
end
loop 每隔一分钟
User->>API: 查询登录状态
end
预览
sequenceDiagram
participant User as 用户
participant API as 接口
User->>API: 提交登录请求
alt 登录成功
API-->>User: 返回令牌
else 登录失败
API-->>User: 返回错误信息
end
loop 每隔一分钟
User->>API: 查询登录状态
end
alt、else、end 表示条件块;loop、end 表示循环块。
4. 类图
类图用于表示类、属性、方法和类之间的关系。Mermaid Class Diagram 官方文档
源码
classDiagram
class User {
+String name
+login()
}
class Order {
+int id
+submit()
}
User "1" --> "*" Order : 创建
预览
classDiagram
class User {
+String name
+login()
}
class Order {
+int id
+submit()
}
User "1" --> "*" Order : 创建
类成员的可见性:
| 符号 | 含义 |
|---|---|
+ | public,公开 |
- | private,私有 |
# | protected,受保护 |
~ | package 或内部可见 |
4.1 类之间的关系
源码
classDiagram
Animal <|-- Dog
Car ..> Engine : 使用
预览
classDiagram
Animal <|-- Dog
Car ..> Engine : 使用
常见关系:
| 写法 | 含义 |
|---|---|
| `< | —` |
*-- | 组合 |
o-- | 聚合 |
--> | 关联 |
..> | 依赖 |
| `.. | >` |
5. 状态图
状态图关注当前状态以及状态之间的转换。Mermaid State Diagram 官方文档
源码
stateDiagram-v2
[*] --> LoggedOut
LoggedOut: 未登录
LoggingIn: 登录中
LoggedIn: 已登录
LoggedOut --> LoggingIn: 点击登录
LoggingIn --> LoggedIn: 验证成功
LoggingIn --> LoggedOut: 验证失败
LoggedIn --> [*]: 退出登录
预览
stateDiagram-v2
[*] --> LoggedOut
LoggedOut: 未登录
LoggingIn: 登录中
LoggedIn: 已登录
LoggedOut --> LoggingIn: 点击登录
LoggingIn --> LoggedIn: 验证成功
LoggingIn --> LoggedOut: 验证失败
LoggedIn --> [*]: 退出登录
状态转换可以读成:
当前状态 --触发事件--> 下一个状态
例如:
未登录 --点击登录--> 登录中
登录中 --验证成功--> 已登录
6. 实体关系图
实体关系图常用于数据库设计。Mermaid ER Diagram 官方文档
源码
erDiagram
CUSTOMER ||--o{ ORDER : places
CUSTOMER {
string id
string name
}
ORDER {
string id
string status
}
预览
erDiagram
CUSTOMER ||--o{ ORDER : places
CUSTOMER {
string id
string name
}
ORDER {
string id
string status
}
常见关系符号:
| 符号 | 含义 |
|---|---|
| ` | |
| `o | ` |
o{ | 零个或多个 |
| ` | {` |
例如:
源码
erDiagram
ORDER ||--|{ ORDER_ITEM : contains
预览
erDiagram
ORDER ||--|{ ORDER_ITEM : contains
7. 如何修改 Mermaid 代码
假设原代码如下。
原始源码
flowchart LR
A[提交] --> B{校验}
B -->|通过| C[保存]
B -->|失败| D[提示错误]
原始预览
flowchart LR
A[提交] --> B{校验}
B -->|通过| C[保存]
B -->|失败| D[提示错误]
现在要实现三个修改:
- 改成从上到下排列。
- 节点文字更清楚。
- 保存后增加“发送通知”。
修改后的源码
flowchart TD
A[提交订单] --> B{校验通过?}
B -->|通过| C[保存订单]
C --> E[发送通知]
B -->|失败| D[显示错误]
修改后的预览
flowchart TD
A[提交订单] --> B{校验通过?}
B -->|通过| C[保存订单]
C --> E[发送通知]
B -->|失败| D[显示错误]
修改时可以按照这个顺序:
- 看第一行,确认图表类型和方向。
- 保留已有 ID,例如
A、B、C。 - 修改节点显示文字,例如
A[提交]改成A[提交订单]。 - 修改连接关系,例如增加
C --> E。 - 检查
subgraph、alt、loop等结构的end是否成对。 - 放入编辑器预览。
节点 ID 是连接关系的依据。只改括号里的文字,通常不会影响连线;如果把 B 改成 Check,还需要同步修改所有引用 B 的连接线。
8. 常见报错原因
8.1 标签中有特殊字符
源码
flowchart LR
A["请求 /api/order?id=1"] --> B["返回 JSON"]
预览
flowchart LR
A["请求 /api/order?id=1"] --> B["返回 JSON"]
8.2 end 被当成特殊关键字
流程图中的节点文字如果使用全小写 end,可能导致解析失败。可以改成大写或使用引号。
源码
flowchart LR
A[End] --> B[完成]
预览
flowchart LR
A[End] --> B[完成]
也可以使用引号:
源码
flowchart LR
A["end"] --> B[完成]
预览
flowchart LR
A["end"] --> B[完成]
8.3 忘记写结束标记
源码
sequenceDiagram
participant A as 用户
participant B as 服务
alt 请求成功
A->>B: 请求
else 请求失败
B-->>A: 错误
end
预览
sequenceDiagram
participant A as 用户
participant B as 服务
alt 请求成功
A->>B: 请求
else 请求失败
B-->>A: 错误
end
8.4 编辑器版本不同
Mermaid 的部分新语法依赖较新的版本。如果同一段代码在一个编辑器能显示,在另一个编辑器报错,可以先检查编辑器内置的 Mermaid 版本。
最简单的验证方式是使用官方 Mermaid Live Editor,先粘贴最小代码。
源码
flowchart LR
A[开始] --> B[结束]
预览
flowchart LR
A[开始] --> B[结束]
确认最小代码可以渲染后,再逐行加入复杂逻辑。
9. Mermaid 语法速查表
| 需求 | 写法 |
|---|---|
| 流程图 | flowchart LR |
| 从上到下 | flowchart TD |
| 矩形节点 | A[文本] |
| 判断节点 | A{条件} |
| 数据库节点 | A[(数据库)] |
| 节点连线 | A --> B |
| 带文字连线 | `A —> |
| 创建分组 | subgraph 名称 |
| 结束分组 | end |
| 时序图 | sequenceDiagram |
| 发起消息 | A->>B: 请求 |
| 返回消息 | B-->>A: 返回 |
| 条件分支 | alt 条件 |
| 循环 | loop 条件 |
| 类图 | classDiagram |
| 定义类 | class User |
| 继承 | `Animal < |
| 状态图 | stateDiagram-v2 |
| 状态转换 | A --> B |
| 开始状态 | [*] --> A |
| 结束状态 | A --> [*] |
| 实体关系图 | erDiagram |
掌握“第一行看类型、括号看节点、箭头看关系、冒号看说明、end 看结构”,就能读懂和修改大部分常见 Mermaid 代码。
评论
使用 GitHub 登录参与讨论。