本文档详细介绍了 draw.io 桌面应用程序的 Electron 主进程架构。主进程负责应用程序生命周期管理、窗口创建、进程间通信、文件系统操作和系统集成。有关渲染器进程及其与主进程通信的信息,请参阅渲染器进程与通信。
主进程作为 draw.io 桌面应用程序的骨干,为操作系统和运行在渲染器进程中的 draw.io Web 应用程序提供了一个安全的桥梁。
来源: src/main/electron.js1-1396
主进程的入口点是electron.js。应用程序启动时,它会初始化和配置环境
来源: src/main/electron.js1-69 src/main/electron.js353-398 src/main/electron.js413-490
主进程维护了几个重要的配置变量
| 可变 | 目的 | 默认 | 配置源 |
|---|---|---|---|
disableUpdate | 控制是否禁用更新 | false | 环境、命令行或 flatpak 检测 |
silentUpdate | 控制更新是否静默安装 | false | 环境或命令行 |
enableSpellCheck | 启用拼写检查 | macOS 上为true | Electron store |
enableStoreBkp | 启用备份存储 | true | Electron store |
isGoogleFontsEnabled | 启用 Google Fonts | false | Electron store |
windowsRegistry | 跟踪所有打开的窗口 | [] | 内存中的数组 |
主进程通过createWindow()函数创建和管理浏览器窗口。此函数
来源: src/main/electron.js147-347
窗口创建时采用了以安全为重点的配置
来源: src/main/electron.js163-177
主进程通过 Electron 的 IPC 机制与渲染器进程通信。这允许 Web 应用程序通过桌面应用程序执行文件访问等系统级操作。
来源: src/main/electron.js232-237 src/main/electron.js391-411 src/main/electron.js947-982 src/main/electron-preload.js1-79
主进程实现了几个用于常见操作的 IPC 处理程序
| 处理器 | 目的 |
|---|---|
newfile | 创建一个新的图表窗口 |
openDevTools | 打开开发者工具进行调试 |
isModified-result | 处理对已修改文档检查的响应 |
toggleSpellCheck | 切换拼写检查功能 |
toggleStoreBkp | 切换备份存储功能 |
toggleGoogleFonts | 切换 Google Fonts 功能 |
toggleFullscreen | 切换全屏模式 |
checkForUpdates | 手动检查应用程序更新 |
zoomIn、zoomOut、resetZoom | 控制应用程序缩放级别 |
来源: src/main/electron.js391-1075
主进程实现了多项安全功能来保护应用程序
来源: src/main/electron.js359-389 src/main/electron.js1224-1255
该应用程序使用严格的 CSP,该策略
来源: src/main/electron.js363-369
主进程包含一个使用 electron-updater 的自动更新系统。它可以
来源: src/main/electron.js19-30 src/main/electron.js1052-1065 src/main/electron.js1129-1138 src/main/electron.js1257-1353
更新系统可以通过多种机制进行配置
| 方法 | 目的 |
|---|---|
命令行标志 --disable-update | 禁用更新检查 |
环境变量 DRAWIO_DISABLE_UPDATE | 禁用更新检查 |
命令行标志 --silent-update | 启用静默更新 |
环境变量 DRAWIO_SILENT_UPDATE | 启用静默更新 |
文件 disableUpdate.js | 由构建脚本修改的中央控制文件 |
来源: src/main/electron.js19-25 src/main/disableUpdate.js1-4 sync.cjs15-16
主进程使用 Commander.js 实现了一个全面的命令行界面。这使得
来源: src/main/electron.js430-489 src/main/electron.js499-840
主进程处理应用程序生命周期,包括
来源: src/main/electron.js356-1178 src/main/electron.js1142-1178
应用程序根据平台实现不同的行为
| 平台 | 行为 |
|---|---|
| macOS | - 自定义应用程序菜单 - 遵守 Cmd+Q 退出 - 处理“open-file”事件 - 当所有窗口关闭时仍然运行 |
| Windows/Linux | - 无菜单栏 - 当所有窗口关闭时退出 |
来源: src/main/electron.js68-71 src/main/electron.js1077-1127 src/main/electron.js1142-1162
主进程创建和管理应用程序菜单,macOS 和 Windows/Linux 的实现方式不同
菜单操作包括