Skip to content

Electron 参考

基于 Electron 43 · 核于 2026-07

速查

  • 版本:Electron 43 = Chromium 150 + Node 24;每 8 周一个大版本、跟 Chromium 偶数号支持最新 3 个大版本(滚动)
  • 进程:main(1,Node,管窗口/生命周期/原生)|renderer(N,Chromium,跑 UI,默认无 Node)|preload(特权桥)|utility(可选 Node 子进程)
  • 三默认安全开关:nodeIntegration=false(v5) | contextIsolation=true(v12) | sandbox=true(v20)
  • IPC 四模式:send/on(渲→主单向)|invoke/handle(渲→主双向★)|webContents.send+ipcRenderer.on(主→渲)|MessageChannelMain(渲↔渲)
  • 分发:Forge(官方,package/make/publish)|electron-builder(社区,自带更新)|ASAR 归档|mac 签名+公证、Win EV / Azure Trusted Signing
  • 更新:autoUpdater(Squirrel)|一行 update-electron-app 接免费服务|update-downloadedquitAndInstall

一、版本坐标

最新稳定线Electron 43(2026-06)
Chromium150
Node.js24
发布节奏8 周 一个大版本(4 周 alpha + 4 周 beta → stable)
Chromium 对齐只跟 Chromium 偶数版本
支持窗口最新 3 个大版本(滚动,如 2026-07 为 43/42/41)
补丁策略每个大版本内只有最新 minor 收补丁

V8 版本号大致 ≈ Chromium 版本号 / 10,但精确 minor 官方 releases 站不列,写题请回避精确到 patch 的 V8 号。

二、进程模型

进程数量环境有 Node职责
main1Node.js✅ 全部入口、窗口、app 生命周期、原生能力
rendererNChromium❌ 默认无跑 UI(网页)
preload每窗口受限渲染上下文⚠️ 受限模块contextBridge 架特权桥
utility可选Node.js不受信/CPU 密集/易崩的活

三、三个默认安全开关

开关安全默认起始版本
nodeIntegrationfalsev5.0.0
contextIsolationtruev12.0.0
sandboxtruev20.0.0

四、IPC 四模式

模式API场景
渲→主 单向ipcRenderer.send / ipcMain.on触发动作、无返回
渲→主 双向 ★ipcRenderer.invoke / ipcMain.handle请求-响应,await 结果
主→渲webContents.send / ipcRenderer.on主进程主动推送
渲↔渲主进程中转 / MessageChannelMain + MessagePort无直接通道
  • 对象走 HTML Structured Clone 序列化;DOM / Node C++(process.env、Stream)/ Electron C++(WebContents、BrowserWindow)不可序列化
  • 避免同步阻塞的 ipcRenderer.sendSync / event.returnValue

五、安全 Checklist(精简)

主线要点
安全传输只加载 HTTPS/wss/ftps、定义 CSP、不关 webSecurity、不开 allowRunningInsecureContent
关危险 APInodeIntegration、开 contextIsolation + sandbox、不开 experimentalFeatures
校验来源will-navigate 限导航、setWindowOpenHandler 拦新窗、shell.openExternal 不接不受信数据、setPermissionRequestHandler
收窄暴露校验 IPC sendercontextBridge 只暴露窄接口、永不透传 ipcRenderer
保持更新用最新版 Electron、审查并关不需要的 Fuses

六、Fuses 硬化建议

Fuse默认硬化
runAsNode
cookieEncryption
nodeOptions
nodeCliInspect
embeddedAsarIntegrityValidation
onlyLoadAppFromAsar
grantFileProtocolExtraPrivileges

工具:@electron/fuses;查状态 npx @electron/fuses read --app <path>

七、分发与更新

要点
Electron Forge官方;packagemakepublish;内置 fuses 插件
electron-builder社区最流行;一体化、自带 auto-update;配置集中
ASAR拼成单个 app.asarresources/;性能 + 简化分发;配 fuse 防篡改
macOS 签名Developer ID + hardened runtime + 公证;未签名连更新/通知都失败
Windows 签名2023-06 起强制 EV;首选 Azure Trusted Signing 消除 SmartScreen
autoUpdater底层 Squirrel;一行 require('update-electron-app')() 接免费服务;无更新返 HTTP 204

八、原生 API 清单

  • 窗口/系统 UIBrowserWindowMenu/MenuItemTraydialogNotificationglobalShortcutshell
  • 系统信息/集成appclipboardnativeThemepowerMonitorscreennativeImagewebContentssessionnet
  • 通知:主进程 new Notification({...}).show()(必须 show());渲染进程用 Web Notifications API。
  • 生命周期whenReady / window-all-closed(非 mac 退出)/ activate(mac 重建)/ before-quit / second-instance

九、Electron vs Tauri

维度Electron 43Tauri v2
引擎自带 Chromium系统 WebView
后端Node.jsRust
包体80-150MB~5-10MB
内存150-300MB30-50MB
一致性
生态最成熟年轻增长快

十、常见易错点

#易错点
1三个安全开关分别自 v5/v12/v20 才默认,非「一直默认」
2preload 里主→渲监听必须包一层剥掉 event,别透传 ipcRenderer.on
3contextBridge 永不直接暴露 ipcRenderer(会经 event.sender 泄露)
4ipcMain.handle 抛错跨进程只保留 message 字段
5所有 IPC handler 都要校验 senderevent.senderFrame.url 的 host)
6DOM / Node / Electron 的 C++ 对象不可序列化,IPC 传会报错
7避免同步的 sendSync / event.returnValue,会冻结渲染进程
8沙箱 v20 起默认nodeIntegration:true连带关沙箱
9window-all-closed 非 mac 才退;activate 仅 mac 无窗时重建
10主进程 Notification 必须 show();渲染进程用 Web API 无需 show
11macOS 未签名连自动更新/通知都失败
12Windows 2023-06 起须 EV 证书,「OV 免警告」已过时
13原生 C++ 模块须 @electron/rebuild 按 Electron 的 Node ABI 重编译
14别阻塞主进程(同步/长任务会冻结整个应用)——用 utility/worker/异步
15支持窗口是最新 3 个大版本(滚动),别写死当前版本

十一、权威链接