尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Mermaid Live Editor实战:用代码画流程图、ER图与文档协作指南

Mermaid Live Editor实战:用代码画流程图、ER图与文档协作指南 画图这件事在文档工作里一直是个麻烦。我见过太多人为了画一张流程图打开 Visio然后花半小时调整箭头对齐也见过有人在团队协作时把 draw.io 的 XML 文件发来发去最后版本对不上图直接打不开。直到我把所有图表需求迁移到 Mermaid Live Editor这些问题才算真正画上句号。Mermaid 是一门用纯文本描述图表的标记语言而 Mermaid Live Editor 是它的官方在线编辑器打开浏览器就能用一边写 mermaid 代码一边看实时渲染结果。你可以把它理解成代码版的画图板不需要安装任何桌面软件不需要注册账号只需要会打字就能产出流程图、时序图、类图、ER 图、甘特图、饼图、状态图等各种图表。下面我会从界面操作讲到语法细节再走一遍完整的学校教学管理 ER 图实战案例最后聊一聊 Typora、GitHub、Notion 这些生态工具里的常见问题。无论你是刚接触 mermaid 语法的新手还是已经在用 Typora 写文档但被图表折腾过的人这篇的内容应该都能帮上忙。1. 为什么说它是终极方案先解决画图难这个老问题写这篇文章之前我在几个技术社区翻了一圈画图工具推荐的老帖子发现大家的吐槽高度集中桌面软件贵、安装包大、跨平台麻烦、协作不方便、导出格式混乱。这些痛点都是真实存在的不是大家不会用工具而是传统图形化编辑的思路本身就有天花板。Mermaid Live Editor 恰好在这些痛点上逐一给出了答案这也是我敢把它称作终极解决方案的原因。1.1 从拖拽画图到写代码出图一次思维转变传统画图工具的核心操作是拖拽从左侧面板拉一个矩形出来双击输入文字再拖一条线连到另一个形状。这套交互看起来直观但当图的规模上来以后调整布局的时间会指数级上升。三五个节点的图没问题三五十个节点之后光是对齐、布线、改字体就能耗掉一下午。Mermaid 换了一个思路图是描述出来的不是画出来的。你只需要用约定的语法告诉它有哪些节点、节点之间的连线是什么、方向朝哪剩下的渲染、布局、布线全部交给引擎。这种思路带来的直接好处有三个。第一图的本质变成了文本放进 Git 里可以逐行 diff团队协作时谁改了什么一目了然彻底告别把图导出成图片改完还不好对比的尴尬。第二文本可以复用同一个流程图改两个变量就能用于另一个场景不用重新拖拽。第三可搜索文档里的图表内容可以被全文检索命中这一点在做知识库的时候尤其好用。1.2 免费、免安装、免注册Live Editor 的成本账Mermaid 本身是 MIT 协议的开源项目Live Editor 作为官方配套工具直接部署在官方域名上打开即用。对比一下主流方案的持有成本Visio 是付费订阅draw.io 虽然免费但要下载客户端或者忍受 Web 版的加载速度ProcessOn 这类在线工具免费额度用完就要付费。Live Editor 的成本账很简单零安装、零注册、零费用。我自己的团队里新同事入职第一天我把 mermaid.live 的链接发过去五分钟之后他就能产出第一张流程图。没有许可证申请流程没有安装包依赖问题连浏览器都是默认就有的。对个人用户来说这意味着想画图随时能画不用先经历一套长达半小时的环境准备。当然免费只是其中一个维度。真正让我长期留下的原因是它是官方工具语法更新和 Live Editor 的功能迭代是同步的。Mermaid 社区每发布一个新版本的语法特性Live Editor 几乎当天就能用上这一点后面讲版本兼容问题时还会重点展开。1.3 诚实地说什么场景不适合用它我不想把 Mermaid 吹成万能的有些场景它确实不适合。比如需要精细控制版式的高保真架构图、需要手工调整每个形状位置的 UI 线框图、带复杂矢量图形的海报类图表这些仍然建议用专业绘图软件。Mermaid 擅长的是逻辑型图表表达流程、关系、时序、结构它不擅长的是视觉型设计。认清这个边界很重要否则你会在 Mermaid 上花大量时间试图微调布局最后发现不如拖拽工具来得直接。我个人的经验判断标准是如果这张图的核心价值在于关系表达清楚就用 Mermaid如果核心价值在于视觉效果好看就老实去用专业工具。两者不是替代关系而是各管一段理解这个边界才能把工具用在刀刃上。2. 打开编辑器第一件事界面布局与三种出图姿势第一次打开 mermaid.live 的人通常会被那个干净到近乎空旷的界面弄懵左边一大块代码区右边一块预览区顶部几个按钮。其实这个工具的设计逻辑很直白搞懂布局之后就能顺畅上手剩下的就是语法问题。2.1 界面分区左边写代码右边看渲染Live Editor 的核心就是左右两栏。左侧是代码编辑器支持自动补全和语法高亮你在这里写入 mermaid 代码右侧是实时预览区只要代码语法正确几乎在你敲下字符的同时图表就会重新渲染。这种写一句看一句的反馈节奏是学习 mermaid 语法最快的方式——你可以随机改一个参数立刻看到它对布局的影响很多语法概念根本不用背试两次就记住了。顶部工具栏有几个值得记一下的按钮。撤销和重做按钮配合浏览器缓存机制能保证误操作可以轻松恢复即使不小心关掉页面再次打开时上一次的编辑内容通常还会保留在本地。第二个是复制链接点击后会把当前图表以压缩后的 URL 形式复制到剪贴板发给同事对方打开就是同一张图这个功能在远程协作时非常实用比截图发来发去高效得多。第三个是下载 SVG和下载 PNG两个导出按钮满足不同场景的图片需求。还有一个比较容易忽略的面板是左下角的配置区点开之后可以设置主题包括默认主题、暗色主题、森林主题等也可以直接编辑初始化配置 JSON控制配色、字体、节点间隔等细节。这个配置区对追求图表风格统一的人来说是刚需后面我会给出一份可以直接抄的配置示例。2.2 三种出图姿势手写、样例、导入第一次接触的人可能不知道从哪里下手其实 Live Editor 提供了三条进路。第一条是手写。在左侧代码区直接输入适合已经熟悉语法或想练习语法的用户。第二条是使用示例库。编辑器顶部有模板/示例入口内置了从简单流程图到复杂 UML 图的几十个示例点击任何一个就会加载到编辑区你可以在此基础上改改成自己的图。对新手来说从示例改起比自己从空白页开始轻松得多很多语法细节看一遍示例就懂了。第三条是导入。Mermaid 的图表文件通常以 .mmd 结尾你可以把别人发来的 .mmd 文件直接拖进 Live Editor 窗口也可以粘贴任意来源的 mermaid 代码块编辑器会自动识别并渲染。这条路径在 Mac 用户之间特别常用因为 .mmd 文件在多种系统之间流转频繁而 Live Editor 天然跨平台接收方不需要装任何东西就能打开大大降低了协作门槛。2.3 导出与分享SVG、PNG、Markdown 怎么选导出环节是很多人第一次卡住的地方。SVG 和 PNG 的区别不只是格式SVG 是矢量图放大不糊适合印刷、PPT、以及后续二次编辑PNG 是位图文件体积小适合网页直接引用。如果你要把图插进 Markdown 文档最简单的方式其实是直接把 mermaid 代码块粘贴进去——后面会讲到支持 Mermaid 的平台会自动渲染完全不需要导出图片。我个人的导出习惯是要改配色和文字时导出 SVG发给外部协作者时导出 PNG自己存档永远保留一份 .mmd 源码。记住一个原则图片是交付物源码是资产。只留图片不留源码下次要改就得重新画保住源码这张图就能持续演进随时可以调整和复用。3. Mermaid 语法核心流程图、时序图、类图、ER 图一次讲透Mermaid 的语法体系说大不大但每个图类型都有自己的关键字和结构。我把日常使用频率最高的六类图整理出来每一类给一个最小可用示例再解释几个关键概念。这些代码你都可以直接复制到 Live Editor 里跑一遍边看边感受比死记硬背有效得多。3.1 流程图graph 的三件套——节点、连线、方向流程图是 Mermaid 里最常用的图表类型一句话总结它的语法定义方向定义节点定义连线。方向声明写在第一行graph 后面跟方向缩写graph TD 表示从上到下graph LR 表示从左到右另外还有 BT从下到上、RL从右到左两种方向。方向的选择直接决定整张图的阅读逻辑我一般处理三层以内的流程用 TD处理横向对比类流程用 LR。节点的写法是节点ID 形状 标签。最常见的几种形状包括方括号表示普通矩形节点圆括号表示圆角矩形花括号表示菱形判断节点双圆括号表示圆形节点。连线的写法是节点A 连接符 节点B其中 -- 表示带箭头的实线--- 表示无箭头连线-- 文本 -- 可以在线上标记文字。下面是一个最小可用的判断流程示例graph TD A[收到请求] -- B{参数校验是否通过} B -- 通过 -- C[处理业务] B -- 不通过 -- D[返回错误] C -- E[记录日志] D -- E这段代码里出现了三种节点形状和两种连线形式逻辑清晰渲染出来就是一张规整的流程图。我经常用它给新人做第一个完整的语法示例因为足够简单又覆盖了节点、判断分支、汇合三条核心概念。3.2 时序图sequenceDiagram 的参与者与消息时序图描述的是多个对象之间按时间顺序的消息传递在接口设计、业务链路梳理场景里非常能打。Mermaid 的时序图语法同样清晰核心概念是参与者和消息。参与者用 participant 关键字声明可以设置别名来让显示名更友好。消息用箭头表示实线箭头 -- 表示同步消息虚线箭头 -- 表示返回或异步消息。另外可以在参与者下方加上生命周期描述或者用 activate/deactivate 标记对象的激活期。下面是一个登录流程的最小示例sequenceDiagram participant U as 用户 participant A as 前端 participant S as 后端 U-A: 输入账号密码 A-S: POST /login S--A: 返回 token A--U: 登录成功这段代码渲染出来的时序图横向是三个参与者的泳道纵向自上而下是消息发生的时间顺序。时序图相比流程图的优势在于它天然带时间轴最怕的就是把消息顺序写乱所以我写时序图时习惯先在心里过一遍真实调用链路再有条理地落地成代码。3.3 类图与 ER 图建模场景的同一套思维类图和 ER 图放在一起讲是因为它们的共同点是描述对象及其关系。类图用于面向对象设计描述类、属性和方法以及类之间的继承、组合、关联关系ER 图用于数据库设计描述实体、属性和实体之间的联系。两者的语法结构高度相似学会一个另一个几乎可以零成本迁移。类图用 classDiagram 开始classDiagram 下列出类名类名下的属性与方法直接写在缩进块里。关系符号是理解类图的关键|-- 表示继承*-- 表示组合o-- 表示聚合-- 表示关联。ER 图用 erDiagram 开始每个实体是一个独立代码块块内的属性用类型 属性名 键标识的格式描述PK 表示主键FK 表示外键。实体之间的关系用实体名 基数符号 关系名 实体名表示基数符号中 ||--o{ 是最常用的表示一方对应零个或多个。这两个图的语法细节会在下一节的完整实战案例里展开这里先建立一个整体印象Mermaid 把建模图的语法设计得足够直观几乎可以用自然语言读出来。3.4 甘特图、饼图、状态图常用小图速查除了前面三类主力图Mermaid 还内置了几种轻量图表适合日常文档里的快速可视化。甘特图用 gantt 关键字声明核心结构是 section 分组和任务条目任务可以指定起止日期或持续时间。对一个项目排期只有几行代码比在表格工具里拖拽方便得多。饼图用 pie 关键字声明每行一个数据项格式是标签 : 数值适合展示占比统计。状态图用 stateDiagram-v2 声明节点表示状态箭头上的文字表示触发事件。gantt title 一周开发计划 section 功能开发 需求评审 :a1, 2025-01-06, 1d 编码实现 :a2, after a1, 3d 联调测试 :a3, after a2, 2dpie title 访问来源占比 直接访问 : 40 搜索引擎 : 35 外部链接 : 25这三类图共同的特点是语法极简、渲染快。我通常不会在正式项目文档里用它们做复杂展示而是用于周报、方案草稿、个人笔记这种轻量场景目的是让读者一眼看到结构而不是陷入细节。Mermaid 这种按需取用的定位正好匹配文档写作里图表只要表达清楚就有价值的原则没必要每个图都追求高保真。4. 实战用 Mermaid 写出学校教学管理 ER 图并落地交付很多人在博客、网课里都见过学校教学管理 ER 图这个经典题目它之所以被反复使用是因为实体关系足够典型有主实体、有关系实体、有基数明确的联系几乎覆盖了数据库建模入门的所有要点。我们用 Mermaid 把它完整实现一遍从需求拆解到最终代码再到导出交付全程给出可直接复制的代码。4.1 需求拆解教学管理到底要管哪些实体先做需求分析。一个常规的学校教学管理系统核心业务是排课和成绩管理围绕这两条业务线至少需要以下实体。院系DEPARTMENT是顶层组织单位管理着教师和学生。教师TEACHER隶属于某一院系负责讲授课程。学生STUDENT隶属于某一院系选修课程并取得成绩。课程COURSE是教学的核心对象一门课程由某位教师讲授通常安排在某间教室。教室CLASSROOM是承载课程的物理资源。选课记录ENROLLMENT是学生和课程之间的关联实体额外承载着成绩字段。这个清单里院系、教师、学生、课程、教室是基础实体选课记录是典型的关系实体因为它除了关联两个主实体外自身还带有成绩这个关键属性。你在设计 ER 图时判断一个表到底该当实体还是当关系的通用标准就是看它是否有额外属性只有两个外键、没有自己属性的关联通常可以直接映射为多对多关系表带成绩这种附加信息的关联建议建模为独立实体。4.2 从实体关系到 ER 图代码一步一步写出来有了实体清单下一步确定基数。一个院系下有多名教师一个院系管理多名学生一名教师讲授多门课程一门课程安排在一间教室一个学生选修多门课程每门课程被多名学生选修——学生与课程之间是多对多关系通过选课记录表拆分成两个一对多。用 Mermaid 的 erDiagram 表达这些关系代码结构是关系声明 实体属性定义两部分。关系声明的通用格式是左实体 基数符号 右实体基数符号用竖线和圆圈的组合表示。|| 表示恰好一个|o 表示零或一个o{ 表示零或多个|{ 表示一或多个。学生到选课记录的 ||--o{ 读作一个学生对应零或多条选课记录。下面是完整的可复制代码直接粘贴到 Live Editor 的左侧代码区即可渲染erDiagram DEPARTMENT ||--o{ STUDENT : 管理 DEPARTMENT ||--o{ TEACHER : 聘用 TEACHER ||--o{ COURSE : 讲授 STUDENT ||--o{ ENROLLMENT : 选修 COURSE ||--o{ ENROLLMENT : 包含 COURSE }o--|| CLASSROOM : 安排 DEPARTMENT { string dept_id PK string dept_name } STUDENT { string student_id PK string name string gender date birth_date string dept_id FK } TEACHER { string teacher_id PK string name string title string dept_id FK } COURSE { string course_id PK string course_name int credit string teacher_id FK string classroom_id FK } CLASSROOM { string classroom_id PK string location int capacity } ENROLLMENT { string student_id 学号 string course_id 课程号 int score }这段代码直接把可以交付的教学管理 ER 图呈现在预览区。你可以根据实际教学场景继续扩展比如增加管理员实体、成绩单视图、选课时间约束等。ER 图建模是迭代过程第一版先保证实体与关系正确再逐步细化字段不要指望一次画到完美。4.3 导出交付插入文档、演示、印刷三种场景的应对图画完之后交付方式要分场景。如果是插入 Markdown 文档比如写课程设计报告或技术方案直接把 mermaid 代码块嵌入文档在支持 Mermaid 的平台Typora、GitHub、Hugo 等上会自动渲染成图。这样既保留了源码可维护性又保证了阅读端的可视化。如果是放到 Word 或 PPT 里我会从 Live Editor 导出 SVG然后在文档工具中做插入。SVG 是矢量格式拉大放小都不糊还能继续调整渐变、箭头等细节。如果是发给外部人员、对方可能需要离线查看就导出 PNG注意导出时选择合适的缩放倍数避免文字发虚。最后一条贴士导出前先在 Live Editor 里把主题和字体调好因为 SVG 文件一旦插入别的软件后续改字体很可能要重导。把这个档前准备做在前面能省掉很多返工时间。5. 生态联动Typora、GitHub、Notion 里的 Mermaid 兼容问题Mermaid 的价值一半在语法本身一半在生态集成。现在主流 Markdown 工具和代码托管平台都支持 Mermaid 渲染但支持和支持得好是两回事。这一节集中回答几个高频搜索词背后的问题Typora 里 mermaid 怎么升级、Mac 上怎么打开 mermaid 文件、为什么同一个代码在不同地方渲染不一样。5.1 Typora 里的 Mermaid 不显示、版本旧怎么办Typora 是很多人写 Markdown 的首选工具它对 Mermaid 的支持相当成熟代码块语言标识写成 mermaid 就能渲染。但typora mermaid 怎么升级这个问题被反复搜索说明用户遇到的典型困境是在 Live Editor 里能渲染的代码粘到 Typora 里却不显示或报错。原因在于 Typora 内置的 Mermaid 版本是固定的它不会跟随 Live Editor 的每日更新而同步升级。当你用到某个新语法特性比如较新版本才支持的象限图、需求图或者某类新形状Typora 的老渲染引擎无法识别自然显示不出来。解决办法按优先级排列第一步把 Typora 升级到最新版本新版本会同步较新的 Mermaid 内核官方更新日志里通常会注明 Mermaid 的版本号第二步如果升级后仍然不行就用兼容写法在 Live Editor 里确认语法属于哪个版本针对旧版本做降级调整第三步实在需要新特性时在 Live Editor 里导出图片再插入 Typora虽然放弃了源码即图的便利但保证了展示效果。5.2 Mac 上打开和编辑 .mmd 文件的几种方式Mac 用户经常遇到一个具体问题同事发来一个 .mmd 文件双击不知道用什么程序打开。macOS 默认不会给 .mmd 绑定任何应用但这不代表它难处理关键在于理解 .mmd 的本质——它就是纯文本。所以最简单的打开方式是把 .mmd 拖进浏览器扔到 mermaid.live 窗口里编辑器会直接加载并渲染这个过程不需要任何额外软件。第二个选择是用 VS Code 打开安装 Markdown Preview Mermaid Support 插件后在编辑器里就能预览。第三个选择是命令行工具 mermaid-climmdc可以批量把 .mmd 转换成 PNG 或 SVG 文件适合处理大量离线文档的场景。我个人在 Mac 上的工作流是日常编辑用 Live Editor因为自动保存和版本历史都在云端缓存里正式项目文件用 VS Code 管理配合 Git 做版本控制到发布阶段就上 mermaid-cli 批量导出。这套组合几乎没有短板你也可以根据自己的使用习惯在这三条路径之间做选择。5.3 为什么同一个 mermaid 代码在不同平台渲染结果不一样这个问题背后的核心是渲染引擎的版本差。Mermaid 作为一个快速迭代的开源项目语法规范在不断演进各平台打包的版本有先有后。Live Editor 永远跑最新版本GitHub 的渲染服务跟随得也很快Typora、Notion 这类桌面软件或商业产品则因为发布周期长内置版本相对滞后。后果就是你写代码时用的是新版本语法在 Live Editor 里渲染完美放到 Notion 里可能整段不显示放到老版本 Typora 里可能报语法错误。应对策略有三个一是项目文档约定统一用稳定特性各平台兼容性最好二是涉及他人协作时标注最低渲染版本三是关键时刻在 Live Editor 导出图片作为兜底方案。兼容性问题不会完全消失但按这个思路处理能把影响降到最低。6. 常见报错与渲染异常踩坑过程与排查思路最后一部分聊实战中高频踩坑的细节。这些坑在官方文档里大多查不到但碰上一次就够你折腾半天。我把它们整理成三类中文与字体、语法细节、性能与可读性每一类都用实际排查的思路来讲而不是直接甩结论。6.1 中文乱码、字体显示不全的问题Mermaid 对中文的支持整体是好的但有两个场景容易出问题。第一个是导出 PNG 时文字发虚或变成方框这通常和渲染环境的字体有关Live Editor 的字体配置一般是健全的如果你从命令行用 mermaid-cli 导出就需要确保系统里有对应中文字体。第二个是标签里的中文内容影响了布局比如节点文字过长导致节点变形这是排版问题不是编码问题。我在本地用 mermaid-cli 批量导出时踩过最狠的一次是整套文档里的图片中文全部变成方块。当时第一反应是代码问题逐行检查 mermaid 语法花了一个小时最后才发现是服务器上没装中文字体把字体补上之后问题立刻消失。这次经历给我的教训是导出环境的字体、浏览器内核这些外部因素往往比语法本身更容易引发中文异常排查方向不要搞反。6.2 语法写对了却不渲染括号、引号、换行这些细节这类问题最让人头疼视觉上看代码好像没错但就是不渲染。我自己排查过无数案例后总结出几个高发点。第一中英文符号混用。Mermaid 的分隔符、花括号、冒号全部要求英文半角很多人在中文输入法状态下打字引号、括号悄悄变成了全角解析器立刻报错。第二节点标签里有特殊字符比如括号、引号、连字符需要用双引号把标签包起来否则语法会被错误解析。第三箭头符号的格式错误-- 和 -- 不能有空格空格一多就从箭头变成了多种符号的组合。第四编辑器里出现不可见字符从网页复制代码时可能带入零宽空格看起来空白一行实际已经破坏了语法。排查顺序建议先把代码整体缩减到一个最小可复现片段确认编辑器本身没问题再逐行检查符号是否半角最后用编辑器右上角的格式化按钮统一整理。我在本地处理 mermaid 报错时习惯的做法是先把代码缩减到最小可复现片段再逐步加回内容定位出问题的那一行这个方法对语法类问题几乎百试百灵。6.3 复杂图表的性能与可读性权衡最后一个坑来自图本身的规模。Mermaid 引擎在渲染上百个节点的大图时布局计算会明显变慢预览变得卡顿偶尔还会出现节点重叠。这时候不要一味加硬件先反思这张图是不是设计上出了问题。我见过很多失败的 Mermaid 大图共性问题是把所有信息塞进一张图节点密到连关系线都看不清。正确的做法是拆图按照业务模块或分层结构把大图拆成多张子图再通过子图subgraph机制在合适的地方做聚合。每张图的核心目标应该是让人在三秒内看懂结构超过这个目标就该考虑拆分。性能之外还有一个可读性细节善用 subgraph 给节点分组善用颜色区分模块必要时通过配置调整节点间距。Mermaid 的布局引擎虽然不是万能的但大多数可读性问题可以通过调整分组和方向解决而不是靠运气。踩过这些坑之后我现在的习惯是把常用图表代码维护在一个私人代码库里包括标准流程图模板、时序图模板、ER 图模板每次新项目直接复制改改既稳定又高效。Mermaid Live Editor 对我来说已经不是一个工具而是整套用文本表达结构化信息的工作方式这个思路值得长期投入。
返回列表