Electron 的本质是把 Chromium 浏览器和 Node.js 运行时打包在一起,让前端代码拥有操作本地文件、调用系统 API 的能力。
一、环境搭建
创建项目后,安装 Electron 到开发依赖:
npm init -y npm install electron --save-dev
在 package.json 里指定入口:
"main": "main.js",
"scripts": {
"start": "electron .",
"build": "electron-builder"
}
二、主进程入口
main.js 负责创建窗口,webPreferences 里开启 nodeIntegration 才能在渲染进程使用 require:
const { app, BrowserWindow } = require('electron');
function createWindow() {
const win = new BrowserWindow({
width: 1200, height: 800,
webPreferences: { nodeIntegration: true, contextIsolation: false }
});
win.loadFile('index.html');
}
app.whenReady().then(createWindow);
三、进程间通信
渲染进程通过 ipcRenderer 发送消息,主进程用 ipcMain 监听。这是实现"点击按钮保存文件"的核心机制:
// 渲染进程
const { ipcRenderer } = require('electron');
ipcRenderer.send('save-data', jsonString);
// 主进程
const { ipcMain } = require('electron');
ipcMain.on('save-data', (event, data) => {
fs.writeFileSync(path.join(__dirname, 'data.json'), data);
});
四、打包踩坑
打包成 ASAR 后,__dirname 指向的是 ASAR 内部虚拟路径,直接用 fs 读取相对路径会报错。解决方法是区分开发环境和生产环境:
const isDev = !app.isPackaged; const basePath = isDev ? __dirname : process.resourcesPath;
另外,Windows 下路径分隔符是反斜杠,一定要用 path.join() 拼接,不要手动拼字符串。