断网了怎么画 Mermaid 图?三步构建零依赖的离线本地编辑器

发布时间:2026/10/13 8:40:13

断网了怎么画 Mermaid 图?三步构建零依赖的离线本地编辑器 断网了怎么画 Mermaid 图三步构建零依赖的离线本地编辑器【免费下载链接】mermaidGeneration of diagrams like flowcharts or sequence diagrams from text in a similar manner as markdown项目地址: https://gitcode.com/GitHub_Trending/me/mermaid内网开发机访问不了公网mermaid.live 打不开一张流程图要验证半天Mermaid Local Editor 是官方 Mermaid 仓库里内置的零依赖本地图编辑器一条命令构建浏览器打开静态页面源码敲进去就出 SVG 预览。读完本文你能在自己机器上跑起它看懂中间渲染 → 净化 → 沙箱的三段管线并把同样的模式搬进内网的图表工具。三步离线构建本地渲染 Mermaid 的完整步骤在空目录执行git clone https://gitcode.com/GitHub_Trending/me/mermaid cd mermaid pnpm install pnpm build:mermaid:full第一条你应该看到mermaid目录出现在当前路径下。第二条pnpm 装完全部依赖无报错即可。第三条跑完一整条构建链——清旧产物、编译 Mermaid 运行时、把编辑器静态文件与mermaid.min.js、purify.min.js两个 vendor 文件拷进同一个输出目录最后用 sirv 起静态服务器。浏览器打开 http://localhost:8081️ 你应该看到左侧是源码文本域右侧深色预览区默认渲染四节点流程图UI -- RuntimeBus -- Orchestrator -- Agents顶部工具栏有图表下拉框、名称输入框和 Save / New / Delete / Reset View / Export SVG 按钮。产物落在packages/mermaid/dist/mermaid-local-editor/这个目录本身就能被拷走用任意静态服务器原样托管。本地版的界面布局与在线版同为左源码、右预览在线版长这样参考本地版 vs 在线版砍掉了什么维度在线版Live EditorLocal Editor账号与云同步保留登录、云存档、历史记录全部砍掉运行依赖从 CDN 加载运行时保留即打即渲染运行时改为 vendor/ 本地拷贝导出与分享保留PNG / SVG 导出、剪贴板、分享链接只保留 SVG 导出其余砍掉节点交互保留图内点击、回调砍掉strict 解析 沙箱无脚本权限数据存放云端localStoragemermaid-diagrams与mermaid-current两个 key在线版 Actions 面板里的剪贴板、PNG/SVG 导出、分享链接本地版都没有从敲键盘到进沙箱的三个关卡关卡一击键变 SVG 字符串。input 事件的第一动作是立刻渲染一次击键之间没有等待同时启动一个 300ms 防抖计时器停止输入才把当前源码写进 localStorage——每次击键都有预览磁盘写入却被合并成一次。渲染参数在初始化时就钉死securityLevel: strict让图内交互失效flowchart.useMaxWidth: false保证缩放后画布不被父容器压回原形。语法写错时异常被捕获以红色文字显示在预览区不是页面挂了。关卡二SVG 字符串过净化、进沙箱。先过 DOMPurify白名单只加了两项const cleanSvg DOMPurify.sanitize(svg, { ADD_TAGS: [foreignObject], ADD_ATTR: [xmlns], });foreignObject是 Mermaid 渲染文本的容器默认白名单会把它剥掉节点标签随之消失放行这两项其余照旧拒绝。接着遍历所有节点剥掉on*内联事件属性再把结果写进一个sandbox只设allow-same-origin的 iframe——没给allow-scripts残余载荷在预览区执行不了。三层各自独立任何一层失效都不致命这正是它敢完全离线、不做服务端校验的原因。关卡三视图状态落盘。每次滚轮缩放scale 被夹在 0.2~4或拖拽平移后translate/scale写到 SVG 上{ scale, panX, panY }同步回写存储的 view 字段。首次访问若main图不存在会补一条默认记录diagrams[current] { src: flowchart LR\n UI -- RuntimeBus -- Orchestrator -- Agents, view: { scale: 1, panX: 0, panY: 0 }, };src 与 view 存在同一条记录里切回图时从上次离开的位置继续。键盘用户按 ArrowDown/ArrowUp 在g.node节点间逐跳移动居中逻辑故意取 1/6 偏移而非严格居中让 LR/TD 布局下的后续节点留在可视区。它做出的三个取舍vendor 拷贝方案赌的是拷走即用。mermaid.min.js与purify.min.js构建期原样拷进dist/vendor/产物目录自包含随便丢给哪个静态服务器都能跑代价是没有热更新上游发新版就得重跑整条构建链。数据全放 localStorage换来零后端、零部署代价是按浏览器与 origin 隔离换设备或清缓存即丢也不存在协作一说。沙箱 iframe 不开allow-scripts图内点击跳转和回调全部失效——这是安全模型要牺牲掉的交互能力。真需要节点交互时把事件监听放到宿主页面而不是放松沙箱。坏了怎么自查端口占用、图消失、红字报错看到什么多半是怎么修图内链接点了没反应strict 沙箱按设计禁用脚本回调移到宿主页面换电脑或清缓存后图全没了localStorage 按浏览器与 origin 隔离先 Export SVG或导出mermaid-diagrams的 JSON8081 被占服务起不来serve:dist里端口写死本地克隆中把--port改成可用端口右侧出现红色报错文字语法错误被捕获pre原样显示按报错修正左侧语法能带走的两个工程模式构建期 vendor 打包。不追求单文件 bundle把运行时与净化库直接拷进dist/vendor/HTML 只写相对路径。产物天然自包含落到任何静态服务器就能跑——适合离线分发优先于产物体积的工具。高危输入走固定三关。渲染、白名单净化、沙箱隔离串成固定序列每关独立生效任何一关被绕过都有后手。离线工具没有服务端校验层底气就来自这种冗余。15 分钟动手跑通构建后把vendor/下两个文件换成另一版本的同名 bundle对比渲染差异或照三关管线写一个 50 行左右的单页用本地静态服务器验证离线可渲染。收尾Mermaid Local Editor 可以概括为构建期 vendor 打包 运行时三层沙箱的最小离线图表工作台核心逻辑集中在 static/6 个 JS 文件总共约 520 行。进阶挑战把 storage 的两个 localStorage key 换成 IndexedDB并给工具栏加 JSON 导出 / 导入按钮让图真正跨设备迁移。【免费下载链接】mermaidGeneration of diagrams like flowcharts or sequence diagrams from text in a similar manner as markdown项目地址: https://gitcode.com/GitHub_Trending/me/mermaid创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/13 8:35:13

浏览器Office文档预览方案:纯前端解析与后端转换实践

简介:Chrome Office Viewer插件资源包面向需要在浏览器内直接查看Office文档的Chrome用户,尤其适合不愿在本地留存敏感文件、对系统安全有较高要求的办公人群。它解决的核心问题是免去下载文件再用桌面软件打开的繁琐步骤,让docx、xlsx、pptx…

2026/10/13 8:35:13

回溯算法详解:从递归模板到剪枝优化与经典题型

1. 回溯算法,到底在解决什么问题 写在第二十五天这个节点上,我正好学完递归、二叉树和深度优先遍历,开始碰回溯算法。说实话,回溯这个名词听上去高大上,拆开看就是“一条路走到黑,走不通就退回来换条路再走…

2026/10/13 8:35:13

模型升级后Agent变笨?Harness适配与回归验证实战

1. 模型换代时,Harness 为什么总是第一个崩做 Agent 应用开发的人,大概都经历过这种时刻:底层模型宣布升级,你满心欢喜地把 API 里的模型名一换,以为只是"换个更聪明的脑子",结果跑完一轮回归测试…

2026/10/13 9:40:42

Spring Boot配置与YAML日志系统实战指南

1. Spring Boot配置体系解析Spring Boot的配置体系是其"约定优于配置"核心理念的重要体现。相比传统Spring框架需要大量XML配置,Spring Boot通过自动配置机制大幅简化了配置工作。在实际项目中,我们主要使用properties和YAML两种配置文件格式&…

2026/10/13 9:40:42

K8s集群Keepalived VIP+NodePort访问不通:根因与解决

如果有一天你发现,K8s集群里用Keepalived漂移出来的VIPNodePort死活访问不通,而直接用节点IP加NodePort却一切正常,别急着怀疑防火墙。我最近就在一套3节点的集群上踩中了这个问题,排查链路很长,根因却特别简单&#x…

2026/10/13 9:40:42

VS2005+Access老组合实战:WinForm增删改查与避坑指南

简介:这份资源是Visual Studio 2005环境下Access数据库开发的经典案例配套光盘,面向正在学习C#与Access数据库结合开发的高校学生、培训学员及初级开发者,帮助解决从建库建表到窗体交互的完整实践问题。压缩包为zip格式,整体约11.…

2026/10/13 9:40:41

线程池CPU打满?两个JDK隐藏BUG实录与排查方法

那台 8C16G 的机器 CPU 直接顶到 100% 的时候,我盯着监控上的红线愣了几秒。后台接口没大流量,数据库 QPS 正常,Redis 也没有慢查询,所有迹象都表明这不是业务峰值该有的样子。真正让我头皮发麻的,是 jstack 打印出来的…

2026/10/13 9:35:41

炼化企业数字化落地实操手册:DCS、MES、APC与数字孪生工程集成指南

简介:本资源是一份98页的《智慧炼化厂综合解决方案》PPT课件,面向石油石化行业数字化转型从业者、智能制造规划人员、企业IT架构师及高校能源类专业师生,系统解答传统炼化企业如何依托新一代信息技术实现智能化升级。课件完整呈现智能炼厂“一…

2026/10/13 5:19:27

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/12 12:01:26

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/12 12:54:07

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/13 0:04:41

基于Triton部署YOLO目标检测:从训练脚本到线上服务

简介:这份资源面向希望将目标检测模型落地到生产环境的深度学习开发者与算法工程师,聚焦于用 Triton Inference Server 部署 YOLOv9 的完整实战方案,解决从训练权重到线上推理服务之间的工程化难题。压缩包共 16 个文件,约 886KB&…

2026/10/13 0:04:41

手把手教你云端部署Qwen-Image-2.1:从GPU选型到在线文生图服务

Qwen-Image-2.1 这个开源的图像生成模型,最近在内容创作和 AI 应用圈子里热度相当高。它属于通义 Qwen 系列里的视觉生成分支,让我眼前一亮的是它对中文长文本的理解能力——以前用那些老方案生成带中文文字的图,十个里九个是“乱码印刷体”&…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑