Skip to content

Commit 5f2cabd

Browse files
chore: automated publish
1 parent 14def74 commit 5f2cabd

3 files changed

Lines changed: 83 additions & 0 deletions

File tree

public/blog/2025-04-03/index.pdf

110 KB
Binary file not shown.

public/blog/2025-04-03/index.tex

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
\title{"用 Mermaid.js 提升技术文档的可视化能力:流程图与架构图实战指南"}
2+
\author{"杨其臻"}
3+
\date{"Apr 03, 2025"}
4+
\maketitle
5+
\chapter{引言}
6+
在软件开发领域,技术文档的可读性直接影响团队协作效率与知识传递效果。传统绘图工具如 Visio 或 Draw.io 虽然功能强大,但其二进制文件格式与代码仓库的文本特性存在天然隔阂。Mermaid.js 作为一款基于文本的图表生成库,通过将图表定义为可版本控制的代码,完美解决了文档与图表同步更新的难题。其 \verb!9.4KB! 的轻量化体积与 Markdown 原生支持特性,使其成为技术写作领域的颠覆性工具。\par
7+
\chapter{第一部分:Mermaid.js 基础入门}
8+
要在 Markdown 中启用 Mermaid.js 渲染,仅需添加以下 HTML 引用:\par
9+
\begin{lstlisting}[language=html]
10+
<script src="https://cdn.jsdelivr.net/npm/mermaid@10.6.1/dist/mermaid.min.js"></script>
11+
\end{lstlisting}
12+
当声明流程图时,方向控制符 \verb!TD!(Top-Down)与 \verb!LR!(Left-Right)决定了图表的布局走向。节点定义采用简洁的标识符语法:\par
13+
\begin{lstlisting}[language=mermaid]
14+
graph LR
15+
A[客户端] --> B(负载均衡器)
16+
B --> C[服务节点1]
17+
B --> D[服务节点2]
18+
\end{lstlisting}
19+
此代码中 \verb!A! 节点的方括号表示矩形,圆括号 \verb!B()! 生成圆角矩形。箭头运算符 \verb!-->! 自动创建带箭头的连接线,这种声明式语法使得图表结构一目了然。\par
20+
\chapter{第二部分:流程图的绘制与实战}
21+
复杂业务流程往往需要多级嵌套结构。通过 \verb!subgraph! 语法可以创建逻辑分组:\par
22+
\begin{lstlisting}[language=mermaid]
23+
flowchart TB
24+
subgraph 认证模块
25+
A[接收凭证] --> B{校验有效性}
26+
B -->|通过| C[生成Token]
27+
end
28+
C --> D[访问资源]
29+
\end{lstlisting}
30+
此处的 \verb!subgraph! 会生成带有背景色的容器,\verb!TB! 指定了自上而下的布局方向。连接线条件分支使用 \verb!|条件|! 语法标注,\verb!{校验有效性}! 的菱形节点天然适合表示决策点。\par
31+
样式定制可通过 CSS 类实现:\par
32+
\begin{lstlisting}[language=mermaid]
33+
flowchart LR
34+
classDef cluster fill:#f9f9f9,stroke:#333;
35+
subgraph 数据库集群:::cluster
36+
A[(主库)]
37+
B[(从库1)]
38+
C[(从库2)]
39+
end
40+
\end{lstlisting}
41+
\verb!classDef! 指令定义了名为 \verb!cluster! 的样式类,圆括号 \verb!()! 表示圆柱形数据库节点,\verb!:::cluster! 将样式应用于子图容器。\par
42+
\chapter{第三部分:架构图的绘制与优化}
43+
微服务架构图需要清晰展示组件边界。使用 \verb!container! 语法可以创建带有标题的分组:\par
44+
\begin{lstlisting}[language=mermaid]
45+
flowchart LR
46+
container 网关层 {
47+
A[API Gateway]
48+
B[Auth Service]
49+
}
50+
container 业务层 {
51+
C[Order Service]
52+
D[Payment Service]
53+
}
54+
A --> C & D
55+
\end{lstlisting}
56+
该代码通过 \verb!&! 符号实现单节点到多节点的并行连接。若需添加交互功能,可嵌入点击事件:\par
57+
\begin{lstlisting}[language=mermaid]
58+
flowchart LR
59+
A[[用户终端]] --> B{{认证中心}}
60+
click B "https://auth.example.com" _blank
61+
\end{lstlisting}
62+
\verb!click! 指令为节点添加了超链接,\verb!_blank! 参数指定在新标签页打开。导出为 SVG 时需调用 \verb!mermaid.initialize()! 并设置 \verb!securityLevel: 'loose'! 以保留交互特性。\par
63+
\chapter{第四部分:与其他工具的集成与自动化}
64+
在 VuePress 中集成 Mermaid.js 只需安装官方插件:\par
65+
\begin{lstlisting}[language=bash]
66+
npm install vuepress-plugin-mermaidjs
67+
\end{lstlisting}
68+
配置文件中添加:\par
69+
\begin{lstlisting}[language=javascript]
70+
module.exports = {
71+
plugins: ['mermaidjs']
72+
}
73+
\end{lstlisting}
74+
此时所有 ````mermaid\verb!代码块都会自动渲染为矢量图表。对于 CI/CD 流水线,可通过!mermaid-cli` 实现自动化导出:\par
75+
\begin{lstlisting}[language=bash]
76+
mmdc -i input.mmd -o output.png -t dark
77+
\end{lstlisting}
78+
\verb!-t! 参数指定主题样式,支持 \verb!default!、\verb!dark!、\verb!forest! 等多种预设,确保生成图表与文档主题风格一致。\par
79+
\chapter{第五部分:最佳实践与避坑指南}
80+
当遇到渲染异常时,可优先检查方向控制符是否冲突。例如在 \verb!flowchart! 类型中使用 \verb!graph TD! 声明会导致解析失败,正确写法应为 \verb!flowchart TB!。对于包含大量节点(超过 50 个)的复杂图表,建议启用 \verb!%%{init: {"flowchart": {"useMaxWidth": false}} }%%! 初始化指令禁用响应式布局以避免元素重叠。\par
81+
\chapter{结语}
82+
Mermaid.js 的生态正在加速进化,近期新增的饼图与用户体验地图支持,使其应用场景突破传统技术文档范畴。与 PlantUML 相比,Mermaid.js 的 JavaScript 原生特性使其更适配现代 Web 技术栈。建议读者从简单的 API 流程图开始实践,逐步将架构文档迁移到这套「代码即图表」的新范式。当团队所有成员都能通过 \verb!git diff! 直观查看图表变更时,技术协作将进入全新的维度。\par

public/blog/2025-04-03/sha256

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ab38a16a307ed52ff220055e15cdf2019829036eb22d3726fb539b78948a91b7

0 commit comments

Comments
 (0)