用 Electron 构建桌面应用:React/Vue 前端框架集成实战指南

by JeariCk 3 min read
electron - 跨平台桌面应用开发框架

你可能已经知道了——Electron 让你用 HTML + CSS + JavaScript 写桌面应用。但知道和上手之间,隔着一堆实际的问题:到底选哪个脚手架?React 和 Electron 怎么通信?Vue 的响应式在桌面端有什么坑?打包之后慢不慢?

electron - 跨平台桌面应用开发框架
electron – 跨平台桌面应用开发框架

2026年的Electron:为啥还有人在用

开始集成之前,想先回答一个基础问题:为什么在 Tauri、Flutter Desktop 这些新框架层出不穷的 2026 年,Electron 依然是桌面应用开发的首选?

答案就是——生态

VS Code、Slack、Discord、Figma、Notion、WhatsApp 桌面版、Obsidian——这些你天天在用的应用全是 Electron 做的。它们证明了 Electron 能撑住亿级用户的产品。你需要什么原生功能——文件系统、系统托盘、剪贴板、自动更新、菜单栏、快捷键——在 Electron 生态里都有现成的方案。

2026 年的 Electron 34.x 已经升级到 Chromium 132 + Node.js 22,进程沙箱更强,基础内存比 32 版降了 8%。虽然它依然随身携带一个完整的 Chrome 浏览器(应用最小编译包 80 MB+),但对很多团队来说,生态成熟度带来的确定性比省下那 100 MB 更值钱。


推荐的技术栈组合

先说结论:Electron Forge + Vite + 你选的前端框架,这是目前最推荐的方案。

过去几年 Electron 的工程化变化挺大的。曾经大家用 Webpack + electron-builder 手动搭,或者用 `electron-react-boilerplate` 这样的社区模板。但 2026 年这些方案已经不是最优解了。

为什么是 Electron Forge?

Electron Forge 是 Electron 官方出品的打包与发布工具链,已经替代了之前分散的 electron-builder、electron-packager 等工具。它提供了从开发到发布的完整管线——项目脚手架、热重载、打包、代码签名、自动更新——一体搞定。

为什么是 Vite?

Vite 在 2026 年已经是前端构建工具的默认选择了。通过 `electron-vite` 这个包,Vite 可以直接用于 Electron 的主进程和渲染进程构建,享受它的极速 HMR 和 esbuild 预构建。

对比传统方案(Webpack),开发体验的差距肉眼可见:

– 冷启动从十几秒降到一两秒

– HMR 几乎即时响应

– 主进程修改也能热重载

React vs Vue 怎么选?

理论上 Electron 支持任何前端框架,但实践中主流的几乎就是 React 和 Vue:

React + Electron

– VS Code 用这个组合,生态最成熟

– 在做编辑器、数据面板这类复杂交互的应用时,React 的组件模型更适合

– React DevTools 和 Electron DevTools 配合得很好

Vue 3 + Electron

– Vue 3 的 Composition API + `<script setup>` 写起来很舒服

– 如果要兼顾 Web 版和桌面版,Vue 更容易做一份代码两处跑

– `electron-vite-vue` 这个模板非常成熟,开箱即用


React + Electron 脚手架搭建

基于 2026 年的最佳实践,推荐这样初始化:

```bash

# 1. 用 Electron Forge 创建项目

npm init electron-app@latest my-app -- --template=vite

# 2. 装上 React

cd my-app

npm install react react-dom

# 3. 配置 Vite 的 React 插件

npm install --save-dev @vitejs/plugin-react

```

然后在 `vite.renderer.config.mjs` 里加上 React 插件:

```js

import { defineConfig } from 'vite';

import react from '@vitejs/plugin-react';

export default defineConfig({

  plugins: [react()],

});

```

这样就完了?对,2026 年的 Electron + React 脚手架就是这么简单。Forge 的新版本已经内置了主进程和渲染进程的 Vite 分离配置,你只需要加前端框架的插件。

有没有更快的办法?

不想手动搞这些的话,直接用 `electron-vite` 的官方模板:

```bash

npm create @electron-vite@latest

```

它支持 React / Vue / Svelte / Solid 四种前端选项,选 React 后直接 `npm run dev` 就行了。


vue.js: 前端框架
vue.js: 前端框架

Vue 3 + Electron 脚手架搭建

Vue 3 的集成方式和 React 类似,区别主要是插件和模板:

```bash

# Electron Forge 创建

npm init electron-app@latest my-vue-app -- --template=vite

# 装 Vue 3

cd my-vue-app

npm install vue

# 装 Vite 的 Vue 插件

npm install --save-dev @vitejs/plugin-vue

```

在 `vite.renderer.config.mjs` 里配置:

```js

import { defineConfig } from 'vite';

import vue from '@vitejs/plugin-vue';

export default defineConfig({

  plugins: [vue()],

});

```

用 `electron-vite` 的 Vue 模板更直接:

```bash

npm create @electron-vite@latest

# 选 Vue 模板

```

还有一个社区维护的模板 `electron-vite-vue`:

```bash

npm create @quick-start/electron@latest

```

选 Vue 就行了。这个模板按主进程、渲染进程、预加载脚本三个目录组织,结构很清晰,推荐新手直接拿来入门。


开发中绕不开的几个坑

1. 进程通信:IPC 的正确姿势

Electron 有两个进程:主进程(Node.js 环境)和渲染进程(浏览器环境)。它们之间通过 IPC(Inter-Process Communication)通信。

新手常犯的错误是直接在渲染进程里调 `fs.readFileSync` 或者 `process.env`。Electron 默认开了 `contextIsolation`,渲染进程已经访问不了 Node.js API 了。所以必须走 IPC:

主进程(main.js):

```js

const { ipcMain } = require('electron');

ipcMain.handle('read-file', async (event, filePath) => {

  const fs = require('fs');

  return fs.readFileSync(filePath, 'utf-8');

});

```

预加载脚本(preload.js):

```js

const { contextBridge, ipcRenderer } = require('electron');

contextBridge.exposeInMainWorld('electronAPI', {

  readFile: (path) => ipcRenderer.invoke('read-file', path),

});

```

React 组件里调用:

```jsx

const data = await window.electronAPI.readFile('/path/to/file');

```

这是 2026 年 Electron 开发的标准模式。`contextBridge` + `ipcRenderer.invoke` 确保了进程安全和内存管理正确。

2. 热重载的几个细节

Vite 的热重载默认只在渲染进程工作。也就是说你改了 React 组件的样式,浏览器实时更新了,但改主进程代码不会自动重启。

`electron-vite` 解决了这个问题:修改主进程代码时,它会自动杀掉 Electron 进程然后重启。实际开发体验接近全栈 HMR。

如果用 Electron Forge + Vite 套装,需要在 `package.json` 的 forge 配置里开启主进程的 watch 模式:

```json

{

  "config": {

    "forge": {

      "packagerConfig": {},

      "plugins": [{

        "name": "@electron-forge/plugin-vite",

        "config": {

          "build": [

            { "entry": "src/main.js", "config": "vite.main.config.mjs" },

            { "entry": "src/preload.js", "config": "vite.preload.config.mjs" }

          ],

          "renderer": [

            { "name": "main_window", "config": "vite.renderer.config.mjs" }

          ]

        }

      }]

    }

  }

}

```

3. 打包和体积控制

一个 React + Electron 的桌面应用最小发布包大约 80-120 MB。觉得太大?有几个实际优化手段:

ASAR 打包:Electron 默认把你的代码打包成 ASAR 归档,文件系统操作更快,体积也小一点

关掉不必要的 Chromium 功能:通过 `–disable-features` 命令行参数去掉你用不到的

管好 Node 原生模块:只用你需要的,不装多余的

代码分割:用 React.lazy + Suspense 分割渲染进程代码

另外注意:`node_modules` 里的大头一般不是你自己的代码。一个中等复杂度的应用,React + 几个 UI 库 + 状态管理就占了很大一部分。

4. 安全基线配置

2026 年的 Electron 默认安全配置已经好多了,但有些东西你得亲自检查:

```js

new BrowserWindow({

  webPreferences: {

    contextIsolation: true,  // 默认开启,保持

    nodeIntegration: false,  // 关掉!永远不要打开

    sandbox: true,           // 渲染进程沙箱

    preload: path.join(__dirname, 'preload.js'),

    webSecurity: true,

  },

});

```

`nodeIntegration: false` 这条红线不能碰。一旦开启,你的 Web UI 代码就能直接调用 Node.js 的所有能力——一个 XSS 漏洞就等于服务器被攻陷。


2026 年的新变化

electron-vite v5

electron-vite 在 2026 年更新到了 v5,带来了几个重要的改进:

– 主进程代码修改后重建速度大幅提升

– Source Code Protection(源代码保护),编译时混淆关键逻辑

– 改进了项目模板的 TypeScript 支持

Electron 34.x 的 ContextBridge 增强

Electron 34 加强了 `contextBridge` 的安全性,限制了预加载脚本中可以暴露的 API 类型。以前可以直接暴露一个对象引用,现在推荐只暴露函数调用,减少渲染进程对主进程对象的引用。

自动更新的新方案

`electron-updater` 不再是最主流的选择。越来越多项目转向 Electron Forge 自带的 `@electron-forge/plugin-auto-update`,因为和打包管线集成更紧密,对常见的更新服务器(S3、GitHub Releases、自定义服务器)支持更好。


选 Electron 还是 Electron + Tauri 混合?

2026 年冒出来的一个新趋势是混合架构:用 Electron 做 UI 层,用 Tauri 的 Rust 后端处理高性能计算或安全敏感操作,通过本地 Socket 或 WebSocket 通信,以这种形式做桌面应用。

听起来挺酷,但现实是你的团队大概率没人力同时维护两套技术栈。除非项目对性能有极致要求(比如视频处理、大规模数据可视化),否则建议老老实实选一条路线走到底。


总结

Electron + React/Vue构建的桌面应用在2026年的开发体验已经相当成熟了:

1. 脚手架首推 Electron Forge + Vite + `@vitejs/plugin-react` 或 `@vitejs/plugin-vue`

2. IPC 通信用 `contextBridge` + `ipcRenderer.invoke` 模式

3. 安全确保 `nodeIntegration: false`、`contextIsolation: true`、`sandbox: true`

4. 热重载用 `electron-vite` 获得主进程 + 渲染进程双热更新

5. 自动更新建议迁移到 Forge 的官方 plugin-auto-update

Electron桌面应用在2026 年就像一个老朋友——你不一定喜欢它的所有缺点(特别是那个不环保的体积和内存),但你知道它能可靠地帮你搞定工作。

📖 推荐阅读

也看看这些跟前端工程师以及AI有关的文章,你可能会感兴趣:

React Compiler 1.0 来了:以后useMemo 和 useCallback 可以删了?

React 19 与 Vue 3.6:同一个2026年,两种不同的前端哲学

本地运行开源大模型指南:从Ollama到DeepSeek,手把手搭建你的私人AI

Dify是什么,程序员值得了解的开源AI应用开发平台

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注