前端流程圖產生器 - mermaid

mermaid:8.0

在寫文件時,最常會遇到需要製作流程圖的案例,但都會有幾種問題:

  • 需要額外產生流程圖再上傳
  • 必須統一製作流程圖的軟體,不然可能會長得不一致
  • 文件不易版本控制和搬移(必須想辦另外處理圖片)

mermaid 是一個可以用類似 Markdown 語法產生流程圖的 Javascript library,使用方式非常簡潔,許多套件或平台基本上都有支援,比如說 GitBookGitLab 等等,當然也可以單獨使用。

graph TD;
    A-->B;
    A-->C;
    B-->D;
    C-->D;

Usage

如果是單獨使用, mermaid 預設會去 parse HTML tag 中加上 class="mermaid" 的 Element。

HTML 範例

<h3>Flowchart</h3>
<div class="mermaid">
    graph TD
    A[Christmas] -->|Get money| B(Go shopping)
    B --> C{Let me think}
    C -->|One| D[Laptop]
    C -->|Two| E[iPhone]
    C -->|Three| F[Car]
</div>

<h3>Sequence diagram</h3>
<div class="mermaid">
    sequenceDiagram
    loop every day
        Alice->>John: Hello John, how are you?
        John-->>Alice: Great!
    end
</div>

<h3>Gantt diagram</h3>
<div class="mermaid">
    gantt
    dateFormat  YYYY-MM-DD
    title Adding GANTT diagram to mermaid

    section A section
    Completed task            :done,    des1, 2014-01-06,2014-01-08
    Active task               :active,  des2, 2014-01-09, 3d
    Future task               :         des3, after des2, 5d
    Future task2               :         des4, after des3, 5d

    section Critical tasks
    Completed task in the critical line :crit, done, 2014-01-06,24h
    Implement parser and jison          :crit, done, after des1, 2d
    Create tests for parser             :crit, active, 3d
    Future task in critical line        :crit, 5d
    Create tests for renderer           :2d
    Add to mermaid                      :1d

    section Documentation
    Describe gantt syntax               :active, a1, after des1, 3d
    Add gantt diagram to demo page      :after a1  , 20h
    Add another diagram to demo page    :doc1, after a1  , 48h

    section Last section
    Describe gantt syntax               :after doc1, 3d
    Add gantt diagram to demo page      : 20h
    Add another diagram to demo page    : 48h
</div>

引入 js

<script src="node_modules/mermaid/dist/mermaid.min.js"></script>
<script>
    mermaid.initialize({startOnLoad: true, theme: 'forest'});
</script>

細節的 config 可以直接參考 Document

Categories: JavaScript