认识 Mermaid:让文档自己画图的「文本即图形」引擎
Mermaid是一个基于文本生成图表的工具,通过简单的文本语法即可自动渲染流程图、时序图、甘特图等。它支持多种图形类型,包括流程图(定义节点形状和连线样式)、时序图(描述交互流程)、甘特图(规划项目进度)和类图(展示类与关系)。Mermaid语法简洁,可版本控制,无需图形化工具,适合集成到Markdown文档中。其核心优势是低心智负担、可版本化、自动化生成和广泛生态支持(如GitHub、VS Co
·
01 认识 Mermaid:让文档自己画图的「文本即图形」引擎
在软件需求、技术方案、会议纪要里,流程图、时序图几乎是标配。传统做法需要打开 Visio、draw.io 或 PowerPoint 手动拖拽,不仅耗时,而且版本管理困难、协作成本高。
Mermaid 把“画图”这件事变成了“写文档”——只要在 Markdown 里写几行类 Markdown 的文本,就能自动渲染出可交互、可搜索、可版本控制的矢量图。它的意义可以概括为:
- 低心智负担:纯文本,无 UI 操作;
- 可版本化:图就是代码,diff 清晰可见;
- 自动化:结合 CI/CD 可以在文档、Wiki、Slide 中自动生成最新图;
- 生态成熟:GitHub、GitLab、Notion、Obsidian、VS Code 均已原生或插件支持。
02 Mermaid 语法总览
Mermaid 语法由“声明块 + 图类型 + 图描述”三部分构成,最简模板如下:
```mermaid
%% 可选:声明图类型
graph TD %% TD=Top-Down,可换成 LR/RL/BT
A[开始] --> B{条件}
B -->|true| C[处理]
B -->|false| D[结束]
```
渲染结果:
03 核心功能与实战示例
下面按场景拆分,逐一枚举常用功能,并给出可直接复制运行的代码。
03-1 Flowchart(流程图)
功能点
- 方向控制(TD/LR/RL/BT)
- 节点形状(矩形、圆角、圆形、子图、数据库)
- 连线样式(实线、虚线、箭头、无箭头、加粗)
- 子图(subgraph)实现嵌套布局
示例:订单状态机
```mermaid
%% 方向:Top-Down
flowchart TD
%% 节点形状
S([开始]) --> P[待支付] -->|支付成功| W{库存检查}
W -->|有货| A[已发货]
W -->|缺货| C[退款中]
C --> E([结束])
A --> E
%% 子图:展示“已发货”内部流程
subgraph 物流子流程
A --> T[拣货] --> D[配送]
end
%% 样式
classDef green fill:#c2e0c6,stroke:#006100
classDef red fill:#f2b3b3,stroke:#c5504b
class A green
class C red
```
渲染结果:
解读
([ ])圆形节点;{ }菱形判断;[ ]矩形。classDef自定义颜色,配合class语句批量着色。subgraph关键字创建可折叠区域,便于大型流程分层展示。
03-2 Sequence Diagram(时序图)
功能点
- Actor / Participant 声明
- 同步/异步消息(
->,-->>) - 激活条(
activate、deactivate) - 循环(loop)、可选(opt)、并行(par)片段
示例:OAuth2 授权码流程
```mermaid
sequenceDiagram
participant U as 用户浏览器
participant A as 前端 App
participant S as 授权服务器
participant R as 资源服务器
U->>A: 点击登录
A->>U: 302 重定向到 /authorize
U->>S: 登录并同意授权
S->>U: 302 返回 code
U->>A: 携带 code 回前端
A->>S: POST /token code+secret
activate S
S-->>A: 返回 access_token
deactivate S
A->>R: GET /userinfo
activate R
R-->>A: 返回用户信息
deactivate R
```
渲染结果:
解读
participant X as 别名解决中文或长名问题。activate/deactivate生成激活条,突出耗时操作。-->>虚线箭头表示异步返回。
03-3 Gantt(甘特图)
功能点
- 任务、里程碑、章节分组
- 日期格式、工作日历
- 关键路径高亮
示例:两周 Sprint 计划
```mermaid
gantt
title Sprint 25 甘特图
dateFormat YYYY-MM-DD
excludes weekends
section 需求
需求澄清 :a1, 2025-08-20, 2d
section 开发
接口设计 :dev1, after a1, 1d
前端开发 :dev2, after dev1, 3d
后端开发 :dev3, after dev1, 3d
section 测试
联调 :t1, after dev2, 1d
回归测试 :t2, after t1, 1d
上线 :m1, milestone, after t2, 0d
```
渲染结果:
gantt
title Sprint 25 甘特图
dateFormat YYYY-MM-DD
excludes weekends
section 需求
需求澄清 :a1, 2025-08-20, 2d
section 开发
接口设计 :dev1, after a1, 1d
前端开发 :dev2, after dev1, 3d
后端开发 :dev3, after dev1, 3d
section 测试
联调 :t1, after dev2, 1d
回归测试 :t2, after t1, 1d
上线 :m1, milestone, after t2, 0d
解读
after 任务名建立依赖,自动计算开始时间。excludes weekends排除周末,甘特条会自动跳过。milestone零耗时节点,常用于发布节点。
03-4 Class Diagram(类图)
功能点
- 类、接口、枚举、包
- 可见性(+ public、- private、# protected)
- 关系:继承(<|–)、组合(*–)、聚合(o–)、关联(–>)
示例:电商核心域模型
```mermaid
classDiagram
class Customer {
-String id
-String name
+register()
}
class Order {
-String orderNo
-BigDecimal amount
+pay()
}
class Product {
-String sku
-int stock
+reduceStock()
}
class OrderItem {
-int quantity
}
Customer "1" --> "*" Order : places
Order "1" *-- "*" OrderItem : contains
OrderItem "*" --> "1" Product : refers
```
渲染结果:
解读
"1" --> "*"表示一对多关联,语义与 UML 一致。*--实心菱形代表强聚合(整体-部分生命周期一致)。
03-5 State Diagram(状态机)
功能点
- 状态、转移、开始/结束节点
- 并发状态(fork/join)
示例:工单状态
```mermaid
stateDiagram-v2
[*] --> New
New --> Assigned : 分派
Assigned --> Processing : 开始处理
Processing --> Resolved : 修复
Resolved --> Closed : 客户确认
Resolved --> Reopened : 未解决
Reopened --> Processing
Closed --> [*]
```
渲染结果:
03-6 Pie Chart(饼图)
```mermaid
pie title 本月服务器错误分布
"5xx" : 42
"4xx" : 28
"Timeout" : 15
"Network" : 9
"Other" : 6
```
03-7 Requirement Diagram(需求追踪)
需求图可追溯到测试用例,适合 MBSE(基于模型的系统工程)。
```mermaid
requirementDiagram
requirement req {
id: 1
text: 用户登录时间 ≤ 2 秒
risk: high
verifymethod: test
}
test_case tc {
id: TC-01
title: 登录性能测试
}
req - traces -> tc
```
04 进阶技巧
- 主题与自定义样式:
Mermaid 内置 7 套主题(default、dark、forest、neutral、base、darkMode、base),也支持覆盖 CSS 变量。%%{init: {'theme':'dark'}}%% - CLI & CI 集成:
安装@mermaid-js/mermaid-cli,可在 GitHub Actions 中把.mmd文件批量转成.svg或.png,并上传到文档站点。 - VS Code 插件:
插件 “Markdown Preview Mermaid Support” 支持实时预览,断点调试语法。 - PlantUML 迁移:
用mermaid-to-plantuml反向转换,或利用mermaid-zenuml输出更符合中文习惯的时序图。
05 总结
- Mermaid 把“图”纳入源码管理,极大降低了维护成本。
- 支持 10+ 种图类型,覆盖需求、架构、排期、运维指标等全链路场景。
- 语法简洁,生态工具链完备,从本地 Markdown 预览到线上自动化文档,全流程无缝。
- 对于团队写作、Code Review、技术博客,Mermaid 都是“写一次,到处渲染”的利器。
下次写文档时,不妨先敲几行 Mermaid,让图“自己长出来”。Happy diagramming!
更多推荐

所有评论(0)