Mermaid Graph 实战指南

Mermaid Graph 语法指南

涵盖 Mermaid flowchart / graph 语法的常用部分,用于绘制架构图、流程图、调用链等。

目录


基础语法

最小示例:

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

三个核心概念:

  • 节点:A[文本]A 是 ID,方括号内是显示内容
  • 连线:A --> B,A 指向 B
  • 标签:A -->|文字| B,连线上加文字

graphflowchart 关键字等价,新写法用 flowchart,支持的特性更多。


节点形状

语法 形状 常见用途
A[文本] 矩形 流程步骤、组件
A(文本) 圆角矩形 操作
A((文本)) 圆形 起止点
A{文本} 菱形 判断
A[/文本/] 平行四边形 输入/输出
A[(文本)] 圆柱 数据库、存储
A{{文本}} 六边形 准备步骤
A(((文本))) 双圈 终止节点
A[[文本]] 子程序 子过程、模块

示例:

```mermaid
flowchart LR
    Start((开始)) --> Input[/用户输入/]
    Input --> Check{合法?}
    Check -->|是| DB[(数据库)]
    Check -->|否| Err[/错误提示/]
    DB --> End(((结束)))
```

连线

线型

语法 含义
A --> B 实线箭头
A --- B 实线无箭头
A -.-> B 虚线箭头
A ==> B 粗实线箭头
A ~~~ B 隐形连线(仅用于布局)

标签

A -->|HTTP 请求| B
A -- HTTP 请求 --> B
A -.->|超时回退| B

多目标

A --> B & C & D     # A 同时指向 B、C、D
A & B --> C         # A、B 都指向 C
A --> B --> C       # 链式

节点较多时用 & 可减少行数。


布局方向

flowchart TB    # 自上而下(默认)
flowchart TD    # 同 TB
flowchart BT    # 自下而上
flowchart LR    # 从左到右
flowchart RL    # 从右到左

经验:流程图用 LR,分层架构图用 TB。子图内可用 direction LR 单独控制方向。


子图

flowchart TB subgraph Frontend["前端层"] direction LR Web[Web] App[App] end subgraph Backend["后端层"] API[API Gateway] Svc[Service] API --> Svc end Frontend --> Backend

要点:

  • subgraph ID["显示标题"],ID 用于连线,标题可含中文和空格
  • 子图必须以 end 结尾
  • 可对子图整体连线(Frontend --> Backend),避免节点间 N×M 连线

样式

三种方式

  • style:单个节点或子图
  • classDef + class:批量样式(推荐)
  • linkStyle:边样式(按声明顺序索引)

classDef 用法

classDef apiNode fill:#dbeafe,stroke:#3b82f6,stroke-width:2px,color:#1e3a8a
classDef dbNode  fill:#fef3c7,stroke:#f59e0b,stroke-width:2px

class A,B,C apiNode
class DB1,DB2 dbNode

class 语句中元素之间只能有一个空格,多空格会触发解析错误。

样式属性

属性 示例 说明
fill #dbeafe 填充色
stroke #3b82f6 边框色
stroke-width 2px 边框粗细
stroke-dasharray 5 5 虚线
color #1e3a8a 文字颜色

linkStyle

linkStyle 0 stroke:#22c55e,stroke-width:3px
linkStyle 0,2,4 stroke:#ef4444
linkStyle default stroke:#64748b,stroke-width:1.5px

边索引从 0 开始,按声明顺序计算。

主题与字体

```mermaid
%%{init: {'theme':'base','themeVariables':{'fontFamily':'Microsoft YaHei, sans-serif','fontSize':'14px'}}}%%
flowchart LR
    A --> B
```

主题可选:defaultbasedarkforestneutral


常见报错

class 语句多空格

class LC,DC      cacheNode    # 报错
class LC,DC cacheNode         # 正确

节点文本含特殊字符

A[a < b]          # 解析失败
A["a < b"]        # 双引号包裹
A[a &lt; b]       # HTML 实体

需注意的字符:< > " ( ) #。建议节点文本统一加双引号。

子图标题含括号

subgraph Cache(缓存)              # 错误
subgraph Cache["缓存(性能关键)"] # 正确

中文 ID

节点 ID 应使用 ASCII。文本可以是中文:

缓存 --> 数据库         # 不推荐
Cache --> DB           # 推荐

Markdown 引用图片时的括号

文件名含 () 时,markdown 图片语法会冲突:

![](./架构(优化版).png)            # 失效
![](<./架构(优化版).png>)          # 用尖括号包裹

classDef 的 font-size

部分版本不支持 font-size。需要加粗或放大文字时,用 HTML 标签更稳妥:

A["<b>重要节点</b><br/><i>说明</i>"]

模板

以下模板用 ```mermaid 单层代码块呈现,markdown 编辑器可直接渲染图形;查看源码请打开本文件原文。

五层分层架构(含外部协作系统)

通用模板:login → 前端 → API → 服务 → 存储,外部系统以虚线区分边界。
所有节点名称为占位符,使用时按实际场景替换。

graph TB classDef userTier fill:#FFF8E1,stroke:#F9A825,stroke-width:2px,color:#5D4037 classDef page fill:#E3F2FD,stroke:#1565C0,stroke-width:1.5px,color:#0D47A1 classDef core fill:#F3E5F5,stroke:#7B1FA2,stroke-width:2px,color:#4A148C classDef service fill:#E8F5E9,stroke:#2E7D32,stroke-width:1.5px,color:#1B5E20 classDef storage fill:#FFF3E0,stroke:#EF6C00,stroke-width:1.5px,color:#E65100 classDef external fill:#FFEBEE,stroke:#C62828,stroke-width:1.5px,color:#B71C1C subgraph L0 ["① login"] direction LR USER(["Actor A<br/>说明"]):::userTier end subgraph L1 ["② 前端表现层"] direction LR PG1["Page Group A<br/>Page1 · Page2 · Page3"]:::page PG2["Page Group B<br/>Page1 · Page2 · Page3"]:::page end API[["③ API 接口层<br/>职责说明 1 · 职责说明 2 · 职责说明 3"]]:::core subgraph L3 ["④ 服务层"] direction LR S1["Service A"]:::service S2["Service B"]:::service S3["Service C"]:::service end subgraph L4 ["⑤ 存储层"] direction LR DB[("Storage A<br/>entity_a · entity_b · entity_c")]:::storage CACHE[("Storage B")]:::storage end subgraph EXT ["⑥ 外部系统"] direction TB EXT1["External A<br/>职责描述"]:::external EXT2["External B<br/>职责描述"]:::external EXT3["External C<br/>职责描述"]:::external end L0 --> L1 PG1 --> API PG2 --> API API --> S1 API --> S2 API --> S3 S1 --> DB S2 --> DB S3 --> DB S2 --> CACHE API -. action 1 .-> EXT1 S2 -. action 2 .-> EXT2 S3 -. action 3 .-> EXT3 L3 ~~~ EXT

占位符约定:

占位符 替换为
Actor A 系统使用方角色
Page Group A/B 前端按功能域聚合的页面分组
职责说明 API 层关注点(如 鉴权 / 校验 / 异常 / 日志)
Service A/B/C 后端按域切分的服务
Storage A/B 持久化或缓存组件
entity_* 数据实体或表名
External A/B/C 外部依赖系统
action * 与外部系统的交互动作

要点:

  • classDef 按层着色,每层一个色系
  • 每层用 subgraph 包裹,内部 direction LR 横向排列同层组件
  • API 层用子程序形状 [[ ]] 突出"统一入口"
  • 存储层用圆柱 [( )],外部系统用普通矩形
  • 主链路实线 -->,外部协作虚线 -.-> 并标注交互动作
  • 末尾 L3 ~~~ EXT 是隐形连线,作为布局锚点让外部系统与服务层 rank 对齐

三层架构

flowchart TB subgraph FE["前端层"] Web[Web 端] Mob[移动端] end subgraph BE["后端层"] GW[API 网关] Svc[业务服务] GW --> Svc end subgraph DATA["数据层"] DB[(主库)] Cache[(缓存)] MQ[/消息队列/] end FE --> BE BE --> DATA classDef fe fill:#dbeafe,stroke:#3b82f6 classDef be fill:#dcfce7,stroke:#22c55e classDef data fill:#fef3c7,stroke:#f59e0b class Web,Mob fe class GW,Svc be class DB,Cache,MQ data

决策流程

flowchart LR Start((开始)) --> Input[/接收请求/] Input --> Auth{已认证?} Auth -->|否| Reject[/拒绝/] Auth -->|是| Limit{超限?} Limit -->|是| Throttle[/限流/] Limit -->|否| Process[处理] Process --> Resp[/返回结果/] Reject --> End(((结束))) Throttle --> End Resp --> End

微服务调用链

flowchart LR Client((Client)) ==> GW[API Gateway] GW ==> Auth[Auth Svc] GW ==> User[User Svc] GW ==> Order[Order Svc] User -.-> UDB[(User DB)] Order -.-> ODB[(Order DB)] Order -.-> MQ[/Kafka/] classDef svc fill:#dbeafe,stroke:#3b82f6,stroke-width:2px classDef store fill:#fef3c7,stroke:#f59e0b,stroke-width:2px class GW,Auth,User,Order svc class UDB,ODB,MQ store

状态机

flowchart LR Draft((草稿)) --> Submit[提交] Submit --> Review{审核} Review -->|通过| Published(((已发布))) Review -->|驳回| Draft Published --> Archive(((归档)))

故障排查树

flowchart TB Issue{服务异常?} -->|是| Check1{CPU 高?} Check1 -->|是| Action1[扩容 / 限流] Check1 -->|否| Check2{内存高?} Check2 -->|是| Action2[内存泄漏排查] Check2 -->|否| Check3{磁盘满?} Check3 -->|是| Action3[清理日志] Check3 -->|否| Action4[查日志 / 链路追踪]

渲染工具

场景 工具
在线预览 mermaid.live
VS Code 插件 Markdown Preview Mermaid Support
GitHub / GitLab 原生支持 mermaid 代码块
Typora 内置渲染
Obsidian 内置渲染
命令行导出 @mermaid-js/mermaid-climmdc

CLI 用法:

npm install -g @mermaid-js/mermaid-cli
mmdc -i diagram.mmd -o diagram.png -w 1920 -H 1080

速查

flowchart LR              # 方向
A[矩形] --> B(圆角)       # 形状 + 实线
B --> C{菱形}             # 判断
C -->|标签| D[(数据库)]   # 标签 + 圆柱
D -.-> E((圆))            # 虚线
A & B --> C               # 多对一
subgraph G["分组"]        # 子图
    direction TB
    X --> Y
end
classDef hi fill:#fef3c7  # 样式定义
class A,B hi              # 应用样式(单空格)
linkStyle 0 stroke:#22c55e # 边样式
posted @ 2026-04-27 21:31  lvlin241  阅读(189)  评论(0)    收藏  举报