在技术文档、系统设计和开发过程中,我们经常需要绘制各种图表来表达思路、流程或架构。传统的绘图工具往往需要手动拖拽元素,不仅耗时,而且难以版本化管理。Mermaid应运而生,它是一种基于文本描述的图表生成工具,让我们可以通过简单的语法快速创建专业的流程图、时序图、甘特图等。本文将全面介绍Mermaid的使用方法,帮助您掌握这一强大的图表绘制工具。

Mermaid简介

Mermaid是一个开源的JavaScript库,可以将文本和代码转换为清晰的图表和可视化内容。它的核心思想是通过简单的标记语言来定义图表结构,然后渲染成美观的图形。

Mermaid支持多种类型的图表:

  • 流程图(Flowchart)

  • 时序图/序列图(Sequence Diagram)

  • 类图(Class Diagram)

  • 状态图(State Diagram)

  • 甘特图(Gantt Chart)

  • 饼图(Pie Chart)

  • 用户旅程图(User Journey Diagram)

Mermaid使用

在线编辑器

最简单的方式是使用官方在线编辑器:Online FlowChart & Diagrams Editor - Mermaid Live Editor

在Markdown中使用

大多数现代Markdown编辑器都原生支持Mermaid(如GitHub、GitLab、Notion、Typora等)。

在网页中集成

<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
<script>mermaid.initialize({startOnLoad:true});</script>

基础语法详解

1. 流程图(Flowchart)

流程图是最常用的图表类型之一,用于展示步骤之间的逻辑关系。

基本语法结构

graph TD
    A[开始] --> B(处理数据)
    B --> C{判断条件}
    C -->|是| D[执行操作]
    C -->|否| E[结束]
    D --> F[保存结果]
    F --> E

节点形状说明

  • (圆角矩形) - 圆角矩形节点

  • [矩形] - 普通矩形节点

  • {菱形} - 判断/决策节点

  • ((圆形)) - 圆形节点

  • > 右向旗帜

  • [/平行四边形\] - 数据输入输出

连接线类型

  • --> 实线箭头

  • -.- 虚线箭头

  • -.-> 虚线带箭头

  • ===> 加粗箭头

更复杂的流程图示例

graph LR
    Start([用户登录]) --> Auth{验证身份}
    Auth -->|成功| Dashboard[仪表盘]
    Auth -->|失败| Login[重新登录]
    Dashboard --> Profile[(个人资料)]
    Dashboard --> Settings((设置))
    Profile --> Edit[编辑信息]
    Settings --> Config[配置选项]
    Edit --> Save[保存更改]
    Config --> Save
    Save --> End([流程结束])

2. 时序图(Sequence Diagram)

时序图用于展示对象之间的交互顺序,特别适用于API调用、微服务通信等场景。

基本语法

sequenceDiagram
    participant User
    participant Browser
    participant Server
    participant Database
    
    User->>Browser: 输入网址
    Browser->>Server: 发送HTTP请求
    Server->>Database: 查询数据
    Database-->>Server: 返回查询结果
    Server-->>Browser: 返回页面内容
    Browser-->>User: 显示页面

时序图高级功能

sequenceDiagram
    participant Client as 客户端
    participant API as API网关
    participant Service as 业务服务
    participant DB as 数据库

    Note over Client, DB: 用户注册流程

    Client->>API: POST /register
    API->>Service: 处理注册请求
    Service->>DB: 检查用户名是否已存在
    DB-->>Service: 返回检查结果
    alt 用户名可用
        Service->>DB: 保存用户信息
        DB-->>Service: 返回保存结果
        Service-->>API: 注册成功
        API-->>Client: 200 OK
    else 用户名已存在
        Service-->>API: 用户名已存在
        API-->>Client: 409 Conflict
    end

时序图中的控制结构

  • alt/else/end 条件分支

  • loop/end 循环结构

  • opt/end 可选操作

  • par/end 并行操作

3. 类图(Class Diagram)

类图用于展示面向对象系统的结构。

classDiagram
    Animal <|-- Duck
    Animal <|-- Fish
    Animal : +String name
    Animal : +Int age
    Animal : +move()
    
    class Animal {
        +String name
        +Int age
        +move()
    }
    
    class Duck {
        +String color
        +swim()
        +quack()
    }
    
    class Fish {
        -int sizeInFeet
        -canEat()
    }

4. 状态图(State Diagram)

状态图展示对象在其生命周期内的状态变化。

stateDiagram-v2
    [*] --> Still
    Still --> Moving: 开始移动
    Moving --> Still: 停止移动
    Moving --> Crash: 发生碰撞
    Crash --> [*]: 结束

5. 甘特图(Gantt Chart)

甘特图用于项目管理和任务规划。

gantt
    title 项目时间规划
    dateFormat YYYY-MM-DD
    section 设计阶段
    需求分析           :done, des1, 2023-01-01, 2023-01-07
    UI设计            :active, des2, 2023-01-08, 3d
    section 开发阶段
    后端开发          :dev1, 2023-01-10, 10d
    前端开发          :dev2, after dev1, 8d
    section 测试阶段
    单元测试          :test1, 2023-01-25, 3d
    集成测试          :test2, after test1, 5d

6. 饼图(Pie Chart)

饼图用于展示比例关系。

pie title 技术栈占比
    "Vue.js" : 40
    "React" : 30
    "Angular" : 20
    "其他" : 10

样式定制

虽然Mermaid本身不直接支持CSS样式,但可以通过配置项进行一些基本定制:

graph TD
    A[默认样式] --> B(圆角矩形)
    B --> C{菱形判断}
    
    %% 通过CSS类可以进一步定制样式
    classDef red fill:#f96,stroke:#333,stroke-width:2px;
    classDef green fill:#9f6,stroke:#333,stroke-width:2px;
    
    class A,B,C red

本地安装

我们可以使用docker本地安装Mermaid Live Editor。

  • 首先通过如下命令下载Mermaid Live Editor的Docker镜像;

docker pull ghcr.io/mermaid-js/mermaid-live-editor
  • 再通过如下命令运行对应的容器;

docker run -p 8080:8080 --name mermaid-live-editor -d ghcr.io/mermaid-js/mermaid-live-editor
  • 通过 http://127.0.0.1:8080 就可以访问Mermaid Live Editor的页面了。

总结

Mermaid是一个功能强大且易于使用的图表生成工具,它让技术文档编写变得更加高效。在日常工作中,不妨尝试用Mermaid来替代传统绘图工具,相信它会给您的文档编写带来全新的体验。无论是系统设计文档、API接口说明,还是业务流程梳理,Mermaid都能帮您快速生成专业级别的图表。