Mermaid完全指南:从基础到高级的图表语法详解

前言:为什么选择Mermaid?

在技术文档、项目说明或技术博客中,图表是传达复杂信息的利器。然而,传统的图表绘制工具往往存在以下痛点:

  • 依赖图形界面,难以版本控制
  • 协作困难,修改繁琐
  • 与文档分离,维护成本高

Mermaid的出现完美解决了这些问题。作为一个基于JavaScript的图表绘制工具,它使用纯文本描述图表,让图表可以像代码一样被版本控制、协作编辑和自动化生成。

一、Mermaid核心特性

1.1 基本优势

✅ 纯文本编写,易于版本控制
✅ 丰富的图表类型支持
✅ 高度可定制化
✅ 开源免费,社区活跃
✅ 与Markdown完美集成

1.2 支持的主要图表类型

  • 流程图 (Flowchart)
  • 时序图 (Sequence Diagram)
  • 类图 (Class Diagram)
  • 状态图 (State Diagram)
  • 实体关系图 (ER Diagram)
  • 甘特图 (Gantt)
  • 饼图 (Pie Chart)
  • 象限图 (Quadrant Chart)
  • 需求图 (Requirement Diagram)
  • Git图 (Git Graph)

二、流程图详解

2.1 基本语法

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

语法说明:

  • graph TD:定义从上到下的流程图
  • graph LR:定义从左到右的流程图
  • A[文本]:矩形节点
  • B{文本}:菱形判断节点
  • -->:带箭头连接线
  • -->|文本|:带标签的连接线

2.2 节点类型

方形节点
圆角节点
椭圆形节点
菱形节点
圆形节点
非对称节点
六边形节点
graph LR
    A[方形节点]
    B(圆角节点)
    C([椭圆形节点])
    D{菱形节点}
    E((圆形节点))
    F>非对称节点]
    G{{六边形节点}}
    
    A --> B --> C --> D --> E --> F --> G

2.3 子图(Subgraph)

子流程2
子流程1
F
C
G
D
B
E
A
H
结束
graph TB
    A --> B
    A --> C
    
    subgraph 子流程1
        B --> D
        D --> E
    end
    
    subgraph 子流程2
        C --> F
        F --> G
    end
    
    E --> H
    G --> H
    H --> I[结束]

2.4 样式自定义

开始
处理数据
成功
失败
graph LR
    A[开始] --> B{处理数据}
    B --> C[成功]
    B --> D[失败]
    
    style A fill:#f9f,stroke:#333,stroke-width:4px
    style B fill:#ccf,stroke:#f66,stroke-width:2px,color:#fff
    style C fill:#9f9,stroke:#333
    style D fill:#f99,stroke:#333

三、时序图详解

3.1 基本时序图

用户 前端 后端 数据库 提交请求 API调用 查询数据 返回结果 JSON响应 显示结果 用户 前端 后端 数据库
sequenceDiagram
    participant 用户
    participant 前端
    participant 后端
    participant 数据库
    
    用户->>前端: 提交请求
    前端->>后端: API调用
    后端->>数据库: 查询数据
    数据库-->>后端: 返回结果
    后端-->>前端: JSON响应
    前端-->>用户: 显示结果

3.2 消息类型

A B 实线箭头(同步) 虚线箭头(异步) 激活B 结束激活 取消或失败 虚线无箭头 A B

3.3 循环和条件

客户端 服务器 登录请求 返回token 获取数据 返回数据页 loop [分页获取] 错误信息 alt [验证成功] [验证失败] 客户端 服务器
sequenceDiagram
    participant 客户端
    participant 服务器
    
    客户端->>服务器: 登录请求
    alt 验证成功
        服务器-->>客户端: 返回token
        客户端->>服务器: 获取数据
        loop 分页获取
            服务器-->>客户端: 返回数据页
        end
    else 验证失败
        服务器-->>客户端: 错误信息
    end

3.4 注释和背景色

在这里插入图片描述

sequenceDiagram
    box rgb(200, 220, 255) 用户端
    participant 浏览器
    participant 移动端
    end
    
    box rgb(220, 255, 220) 服务器端
    participant Web服务器
    participant 数据库
    end
    
    Note left of 浏览器: 用户发起请求
    浏览器->>Web服务器: HTTP请求
    Note over Web服务器,数据库: 数据处理过程
    Web服务器->>数据库: SQL查询
    数据库-->>Web服务器: 查询结果
    Web服务器-->>浏览器: HTML响应

四、类图详解

4.1 类定义

Animal
+String name
+int age
+eat()
+sleep()
Dog
+String breed
+bark()
Cat
+int lives
+meow()
classDiagram
    class Animal {
        +String name
        +int age
        +eat()
        +sleep()
    }
    
    class Dog {
        +String breed
        +bark()
    }
    
    class Cat {
        +int lives
        +meow()
    }
    
    Animal <|-- Dog
    Animal <|-- Cat

4.2 关系类型

继承
组合
聚合
关联
依赖
实现
A
B
C
D
E
F
classDiagram
    class A
    class B
    class C
    class D
    class E
    class F
    
    A <|-- B : 继承
    C *-- D : 组合
    E o-- F : 聚合
    A --> B : 关联
    A ..> B : 依赖
    A --|> B : 实现

4.3 类成员可见性

BankAccount
-String accountNumber
#double balance
+String ownerName
~String bankCode
+deposit(amount)
-validateTransaction()
#calculateInterest()
+getBalance()
-logTransaction()
classDiagram
    class BankAccount {
        -String accountNumber
        #double balance
        +String ownerName
        ~String bankCode
        +deposit(amount)
        -validateTransaction()
        #calculateInterest()
    }
    
    BankAccount : +getBalance()
    BankAccount : -logTransaction()

五、状态图详解

5.1 基本状态图

启动命令
暂停命令
恢复命令
停止命令
待机
运行
初始化
处理中
完成
暂停
stateDiagram-v2
    [*] --> 待机
    待机 --> 运行 : 启动命令
    运行 --> 暂停 : 暂停命令
    暂停 --> 运行 : 恢复命令
    运行 --> 待机 : 停止命令
    待机 --> [*]
    
    state 运行 {
        [*] --> 初始化
        初始化 --> 处理中
        处理中 --> 完成
        完成 --> [*]
    }

5.2 并发状态

系统启动
加载配置
初始化模块
运行中
并发处理
接收请求
处理请求
返回响应
后台任务
定时任务
数据处理
日志记录
系统关闭
stateDiagram-v2
    [*] --> 系统启动
    
    state 系统启动 {
        [*] --> 加载配置
        加载配置 --> 初始化模块
        初始化模块 --> [*]
    }
    
    state 运行中 {
        state 并发处理 {
            接收请求 --> 处理请求
            处理请求 --> 返回响应
        }
        
        state 后台任务 {
            定时任务 --> 数据处理
            数据处理 --> 日志记录
        }
    }
    
    系统启动 --> 运行中
    运行中 --> 系统关闭
    系统关闭 --> [*]

六、甘特图详解

6.1 项目计划

01/01 01/03 01/05 01/07 01/09 01/11 01/13 01/15 01/17 01/19 01/21 01/23 01/25 01/27 01/29 01/31 02/01 02/03 02/05 需求分析 原型设计 UI设计 前端开发 后端开发 集成测试 单元测试 用户测试 设计阶段 开发阶段 测试阶段 项目开发计划
gantt
    title 项目开发计划
    dateFormat YYYY-MM-DD
    axisFormat %m/%d
    
    section 设计阶段
    需求分析 :done, des1, 2024-01-01, 7d
    原型设计 :active, des2, after des1, 5d
    UI设计 :des3, after des2, 5d
    
    section 开发阶段
    后端开发 :dev1, after des3, 10d
    前端开发 :dev2, after des2, 12d
    
    section 测试阶段
    单元测试 :test1, after dev1, 5d
    集成测试 :test2, after dev2, 7d
    用户测试 :test3, after test2, 5d

6.2 里程碑

2024-01-21 2024-01-28 2024-02-04 2024-02-11 2024-02-18 2024-02-25 2024-03-03 2024-03-10 2024-03-17 2024-03-24 2024-03-31 2024-04-07 2024-04-14 2024-04-21 2024-04-28 需求确认 Alpha版本 Beta版本 正式发布 里程碑 产品发布里程碑
gantt
    title 产品发布里程碑
    dateFormat YYYY-MM-DD
    
    section 里程碑
    需求确认 :milestone, m1, 2024-01-15, 0d
    Alpha版本 :milestone, m2, 2024-02-28, 0d
    Beta版本 :milestone, m3, 2024-03-31, 0d
    正式发布 :milestone, m4, 2024-04-30, 0d

七、实体关系图

7.1 数据库设计

CUSTOMER string name string email int customerId PK ORDER int orderId PK date orderDate string status LINE-ITEM int itemId PK int quantity decimal price PRODUCT int productId PK string productName decimal price places contains includes
erDiagram
    CUSTOMER ||--o{ ORDER : places
    ORDER ||--|{ LINE-ITEM : contains
    CUSTOMER {
        string name
        string email
        int customerId PK
    }
    ORDER {
        int orderId PK
        date orderDate
        string status
    }
    LINE-ITEM {
        int itemId PK
        int quantity
        decimal price
    }
    PRODUCT ||--|{ LINE-ITEM : includes
    PRODUCT {
        int productId PK
        string productName
        decimal price
    }

八、饼图详解

8.1 数据分布

15% 20% 35% 25% 5% 开发时间分配 需求分析 设计 编码 测试 文档
pie title 开发时间分配
    "需求分析" : 15
    "设计" : 20
    "编码" : 35
    "测试" : 25
    "文档" : 5

8.2 带值显示

65% 19% 9% 4% 3% Chrome [65.3] Safari [18.7] Firefox [8.9] Edge [4.1] 其他 [3]
pie showData
    "Chrome" : 65.3
    "Safari" : 18.7
    "Firefox" : 8.9
    "Edge" : 4.1
    "其他" : 3.0

九、象限图详解

9.1 技术评估

在这里插入图片描述

quadrantChart
    title 技术栈评估矩阵
    x-axis "成熟度低" --> "成熟度高"
    y-axis "采用率低" --> "采用率高"
    quadrant-1 "评估"
    quadrant-2 "采纳"
    quadrant-3 "规避"
    quadrant-4 "验证"
    "React": [0.75, 0.80]
    "Vue.js": [0.65, 0.70]
    "Angular": [0.85, 0.60]
    "Svelte": [0.45, 0.35]
    "Next.js": [0.70, 0.75]

十、实用技巧和最佳实践

10.1 主题定制

// 自定义主题示例
{
  theme: 'base',
  themeVariables: {
    primaryColor: '#BB2528',
    primaryTextColor: '#fff',
    primaryBorderColor: '#7C0000',
    lineColor: '#F8B229',
    secondaryColor: '#006B00',
    tertiaryColor: '#fff'
  }
}

10.2 与Markdown集成

# 项目文档

## 系统架构

```mermaid
graph TD
    客户端 --> 负载均衡器
    负载均衡器 --> Web服务器1
    负载均衡器 --> Web服务器2
    Web服务器1 --> 数据库
    Web服务器2 --> 数据库
```

## API调用流程

```mermaid
sequenceDiagram
    客户端->>API网关: 请求
    API网关->>认证服务: 验证token
    认证服务-->>API网关: 验证结果
    API网关->>业务服务: 转发请求
    业务服务-->>客户端: 返回响应
```

10.3 性能优化建议

  1. 避免过度复杂:单个图表不要超过50个节点
  2. 使用子图:将相关逻辑分组到子图中
  3. 精简文本:节点文本尽量简洁
  4. 适当使用注释:使用Note添加说明而非长文本节点

10.4 常见问题解决

问题1:图表渲染不完整

解决方案:
1. 检查语法是否正确闭合
2. 确保没有嵌套过深
3. 验证特殊字符是否正确转义

问题2:样式不生效

解决方案:
1. 确认主题文件正确加载
2. 检查CSS选择器是否正确
3. 验证样式优先级

问题3:与编辑器的兼容性问题

解决方案:
1. 使用最新的Mermaid版本
2. 检查编辑器的Mermaid插件版本
3. 考虑使用在线编辑器预览

十一、实际应用案例

11.1 微服务架构图

数据层
基础设施
业务服务
网关层
用户数据库
订单数据库
商品数据库
认证中心
配置中心
消息队列
日志服务
用户服务
订单服务
支付服务
商品服务
API网关
负载均衡
客户端
graph TB
    subgraph 网关层
        GW[API网关]
        LB[负载均衡]
    end
    
    subgraph 业务服务
        A[用户服务]
        B[订单服务]
        C[支付服务]
        D[商品服务]
    end
    
    subgraph 基础设施
        E[认证中心]
        F[配置中心]
        G[消息队列]
        H[日志服务]
    end
    
    subgraph 数据层
        DB1[(用户数据库)]
        DB2[(订单数据库)]
        DB3[(商品数据库)]
    end
    
    客户端 --> LB --> GW
    GW --> A
    GW --> B
    GW --> C
    GW --> D
    
    A --> E
    A --> F
    A --> G
    A --> H
    
    A --> DB1
    B --> DB2
    D --> DB3
    
    B --> C
    C --> G

11.2 CI/CD流水线

监控阶段
部署阶段
构建阶段
开发阶段
监控告警
日志分析
用户反馈
迭代优化
预发布环境
集成测试
性能测试
生产部署
构建镜像
安全扫描
镜像推送
代码审查
代码提交
自动化测试
graph LR
    subgraph 开发阶段
        A[代码提交] --> B[代码审查]
        B --> C[自动化测试]
    end
    
    subgraph 构建阶段
        C --> D[构建镜像]
        D --> E[安全扫描]
        E --> F[镜像推送]
    end
    
    subgraph 部署阶段
        F --> G[预发布环境]
        G --> H[集成测试]
        H --> I[性能测试]
        I --> J[生产部署]
    end
    
    subgraph 监控阶段
        J --> K[监控告警]
        K --> L[日志分析]
        L --> M[用户反馈]
        M --> N[迭代优化]
    end
    
    N -.-> A

十二、学习资源推荐

12.1 官方资源

  • 官网: https://mermaid.js.org
  • GitHub: https://github.com/mermaid-js/mermaid
  • 在线编辑器: https://mermaid.live

12.2 实用工具

  1. VS Code插件: Mermaid Preview
  2. Chrome扩展: Mermaid Diagrams
  3. CLI工具: @mermaid-js/mermaid-cli

12.3 进阶学习

  • 官方示例库: 包含所有图表类型的详细示例
  • 社区论坛: 获取帮助和分享经验
  • 贡献指南: 参与Mermaid开发

结语

Mermaid以其简洁的语法和强大的功能,已经成为技术文档中不可或缺的工具。通过本文的详细介绍和实例展示,相信您已经掌握了Mermaid的核心用法。

记住,Mermaid的真正价值在于将复杂的视觉信息转化为可维护的文本。无论是系统架构设计、API接口说明,还是项目计划安排,Mermaid都能帮助您更高效地进行沟通和协作。

开始使用Mermaid,让您的技术文档更加专业和易于维护吧!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐