本页面提供 draw.io 桌面应用程序架构的高层概述,解释了 Electron 框架如何封装和集成 draw.io 核心绘图引擎。有关主进程实现的具体细节,请参阅主进程,或有关渲染进程的细节,请参阅渲染进程和通信。
draw.io 桌面应用程序是使用 Electron 构建的,Electron 是一个支持使用 Web 技术开发桌面应用程序的框架。该架构遵循 Electron 的进程模型,包括一个管理应用程序窗口和系统集成的*主进程*,以及显示实际 draw.io 绘图界面的*渲染进程*。
来源: src/main/electron.js1-35 package.json1-10
主进程(electron.js)是应用程序的入口点,负责控制应用程序的生命周期。它负责创建浏览器窗口、处理原生菜单、管理文件操作以及提供系统级别的集成。
主进程提供多个关键功能:
来源: src/main/electron.js147-347 src/main/electron.js356-391
渲染进程在 Electron 浏览器窗口中运行 draw.io Web 应用程序。实际的 draw.io 核心功能是从包含 Web 应用程序代码的本地目录加载的。
主进程和渲染进程之间的通信通过预加载脚本进行安全地保障,该脚本仅向渲染进程公开特定的、受控的 API。
electron-preload.js)通过 Electron 的 contextBridge 建立安全的桥梁。来源: src/main/electron-preload.js1-79 src/main/electron.js172-175
安全性是该架构的主要关注点,并采取了多项保护措施。
强制执行严格的内容安全策略(Content Security Policy, CSP)以防止常见的 Web 漏洞。
应用程序:
来源: src/main/electron.js359-389 src/main/electron.js172-175
该应用程序包含一个自动更新机制,可以:
更新系统可以通过以下方式进行配置:
DRAWIO_DISABLE_UPDATE、DRAWIO_SILENT_UPDATE)。--disable-update、--silent-update)。disableUpdate.js)。来源: src/main/electron.js20-30 src/main/electron.js1129-1138 src/main/disableUpdate.js1-4 sync.cjs15-16
桌面应用程序将 draw.io 核心作为子模块进行集成。
集成方式如下:
来源: src/main/electron.js75-76 src/main/electron.js216-224 package.json36-46
该应用程序使用多种配置机制。
关键配置设置包括:
| 设置 | 目的 | 默认 |
|---|---|---|
enableSpellCheck | 切换拼写检查功能。 | macOS 上为 true,其他系统为 false。 |
enableStoreBkp | 启用备份文件存储。 | true |
isGoogleFontsEnabled | 允许加载 Google 字体。 | false |
disableUpdate | 禁用自动更新 | false |
来源: src/main/electron.js69-82 src/main/electron.js84-102
该应用程序通过命令行选项提供强大的导出功能,支持 PDF、PNG、JPEG 和 SVG 等格式。导出系统:
此功能允许通过命令行界面对图表进行批量处理。
来源: src/main/electron.js499-841
该应用程序针对不同平台具有专门的行为。
这些平台差异包括:
来源: src/main/electron.js68-69 src/main/electron.js1077-1127 src/main/electron.js1142-1147
该应用程序使用 @cantoo/pdf-lib 包集成了 PDF 生成功能,允许:
此功能提供了比纯 Web 应用程序更增强的导出功能。