Electron 的结构是主进程加渲染进程:主进程用 Node 能力创建窗口、访问文件系统、调原生菜单;渲染进程就是普通的浏览器页面,跑你的前端代码。两者通过 IPC 通信。VS Code、飞书、Discord 桌面端都是它做的——用 Web 技术写出桌面软件,团队复用现有前端技能。
最大的痛是体积与内存:每个应用都内嵌一个完整 Chromium,安装包动辄百兆,内存占用也偏高。安全是另一道红线:渲染进程若能直接用 Node 的全部能力,页面里的恶意脚本就能读写硬盘,所以必须开启 contextIsolation、禁用 nodeIntegration、经 preload 严格暴露接口。
// 主进程(main.js):用 Node 创建窗口 var electron = require('electron'); var app = electron.app, BrowserWindow = electron.BrowserWindow; var win; app.whenReady().then(function () { win = new BrowserWindow({ webPreferences: { contextIsolation: true, nodeIntegration: false } }); win.loadFile('index.html'); }); // preload.js:主进程与渲染进程之间的安全桥(白名单暴露) var { contextBridge, ipcRenderer } = require('electron'); contextBridge.exposeInMainWorld('api', { saveFile: function (name, text) { ipcRenderer.send('save-file', name, text); } }); // 渲染进程(页面里的普通 JS) document.getElementById('btn').addEventListener('click', function () { window.api.saveFile('note.txt', '来自 Electron 的笔记'); });