{T}

Electron 简介与安装

Electron 是一个使用 HTMLCSSJavaScript 构建跨平台桌面应用的开源框架。它将 ChromiumNode.js 合并到同一个运行时环境中,并提供丰富的原生 API,使开发者能够使用纯 Web 技术开发功能强大的桌面应用,支持 Windows、macOS 和 Linux 三大平台。

版本推荐:当前稳定版为 Electron 35.x,基于 Chromium 134 和 Node.js 22.x。新项目建议使用最新稳定版,并启用上下文隔离和沙箱化。

系统架构

Electron 的核心架构由三大部分组成,它们协同工作以实现桌面应用开发能力:

plaintext
┌─────────────────────────────────────────────────────────────────┐
│                        Electron 应用                             │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  ┌─────────────────────┐       ┌─────────────────────┐         │
│  │   主进程 (Main)      │       │  渲染进程 (Renderer) │         │
│  ├─────────────────────┤       ├─────────────────────┤         │
│  │ • Node.js 环境      │ IPC   │ • Chromium 环境     │         │
│  │ • 完整系统权限        │◄────►│ • Web 页面渲染      │         │
│  │ • 原生 API 调用     │       │ • HTML/CSS/JS       │         │
│  │ • 窗口管理          │       │ • DOM API           │         │
│  │ • 应用生命周期      │       │ • 有限的 Node API   │         │
│  └─────────────────────┘       └─────────────────────┘         │
│           │                              │                      │
├───────────┼──────────────────────────────┼──────────────────────┤
│           ▼                              ▼                      │
│  ┌─────────────────────────────────────────────────────┐       │
│  │           底层技术栈                                 │       │
│  ├─────────────────────────────────────────────────────┤       │
│  │ • Chromium: UI 渲染引擎                             │       │
│  │ • Node.js: 系统交互能力                             │       │
│  │ • Native APIs: 操作系统原生功能                     │       │
│  └─────────────────────────────────────────────────────┘       │
└─────────────────────────────────────────────────────────────────┘

核心组件说明

组件说明作用
ChromiumGoogle 开源的浏览器内核提供强大的 UI 渲染能力,相当于没有地址栏和标签页的精简版 Chrome 浏览器
Node.jsJavaScript 运行时环境提供文件读写、网络请求、调用系统命令等底层操作能力,突破浏览器沙箱限制
Native APIsElectron 提供的原生 API允许访问操作系统原生功能,如创建窗口、定义菜单、显示系统通知、操作剪贴板等

多进程架构

Electron 采用多进程架构,主要包含两种进程:

  • 主进程 (Main Process): 应用入口文件(通常是 main.js)运行的进程,拥有完整的 Node.js 环境,负责管理应用生命周期、创建窗口、处理原生系统交互
  • 渲染进程 (Renderer Process): 每个 BrowserWindow 实例运行在独立的渲染进程中,负责渲染 Web 页面,默认运行在沙箱环境中以增强安全性

进程间通过 IPC (Inter-Process Communication) 进行通信,确保安全性和稳定性

技术特性

核心优势

1. 低学习成本与高开发效率

  • Web 技术栈: 使用熟悉的 HTML、CSS、JavaScript 即可开发桌面应用,前端开发者无需学习新技术
  • 丰富的生态: 可使用几乎所有 Web 前端和 Node.js 生态的组件与工具链,如 React、Vue、Webpack 等
  • 快速原型开发: 开发调试体验与 Web 开发一致,支持热重载和 DevTools

2. 跨平台能力

一次编写,即可运行在 Windows、macOS、Linux 三大平台,大幅降低多平台开发和维护成本。

3. 强大的系统能力

突破浏览器沙箱限制,提供完整的系统访问能力:

能力类别具体功能
文件系统文件读写、目录管理、文件监听
系统集成系统托盘、桌面通知、剪贴板、Dock/任务栏
窗口管理多窗口、无边框窗口、透明窗口、始终置顶
原生菜单应用菜单、上下文菜单、系统菜单集成
硬件访问摄像头、麦克风、蓝牙、USB 设备
网络功能HTTP 请求、WebSocket、原生 net 模块

4. 持续更新的 Web 标准

内置 Chromium 浏览器支持最新的 Web 标准(HTML5、CSS3、ES6+),开发者无需考虑浏览器兼容性问题。

5. 高性能扩展能力

对于音视频编解码、图形图像处理等计算密集型任务,可通过 Node.js C++ 扩展实现,与原生应用性能相当。

主要不足

不足之处具体表现缓解方案
应用体积大压缩打包后至少 40MB+使用增量更新、代码压缩、按需下载资源
内存占用高Chromium 本身资源消耗较大优化渲染策略、减少后台进程、使用 WebAssembly
开发复杂度需要理解多进程架构和 IPC 通信熟练掌握官方文档、遵循最佳实践
版本更新快紧跟 Chromium 版本可能导致兼容性问题谨慎升级、充分测试、使用稳定版本
安全风险Node.js 集成带来潜在安全隐患启用上下文隔离、禁用 nodeIntegration、验证 IPC 消息

版本说明

版本命名规则

Electron 遵循 SemVer 语义化版本规范,版本号格式为 主版本号.次版本号.修订号

  • 主版本号 (Major): 不兼容的 API 修改
  • 次版本号 (Minor): 向下兼容的功能性新增
  • 修订号 (Patch): 向下兼容的问题修复

版本发布策略

Electron 采用快速发布策略以同步 Chromium 更新:

版本类型更新频率稳定性适用场景
Stable每 2-3 个月生产环境推荐使用
Beta每周测试新功能、提前适配
Nightly每天开发实验、问题排查

版本选择建议

bash
# 查看所有可用版本
npm view electron versions
 
# 安装指定版本
npm install electron@28.0.0 --save-dev
 
# 安装最新稳定版
npm install electron@latest --save-dev
 
# 安装 beta 版本
npm install electron@beta --save-dev

推荐做法:

  • 生产环境使用最新的稳定版本(LTS)
  • 新项目建议使用最新稳定版以获得更好的性能和安全性
  • 老项目升级前务必查阅 Electron 发布说明

版本兼容性

Electron 版本Node.js 版本Chromium 版本支持状态
30.x20.x124✅ 最新
29.x20.x122✅ 稳定
28.x18.x120✅ 维护中
27.x18.x118⚠️ EOL
26.x18.x116❌ 已停止

完整版本支持计划请查看 Electron Support

学习资源与工具

官方资源

社区资源

开源项目参考

学习优秀开源项目是提升实战能力的最佳途径:

桌面端开发技术对比

桌面端应用开发技术 Tauri、NW.js、Flutter、Electron

框架核心技术栈架构模式生态与社区适用场景安全性安装包体积
ElectronJavaScript/HTML/CSS + Chromium + Node.js主进程 + 渲染进程非常成熟,拥有庞大的社区和丰富的插件功能丰富、需要快速迭代的跨平台应用,尤其适合 Web 开发者需自行关注 Chromium 漏洞,谨慎处理外部内容和 Node.js API较大,内置 ChromiumNode.js 运行时
TauriRust + WebView (系统提供)前端 + Rust 核心后端快速成长,势头迅猛,灵活性高对性能、安全性和体积要求高的应用,适合 Rust 开发者Rust 语言天生具有内存安全优势,沙箱模型更严格极小,利用系统 WebView,无需捆绑浏览器内核
NW.jsJavaScript/HTML/CSS + Chromium + Node.js单一进程/混合进程模式相对较小,早期与 Electron 类似与 Electron 类似,但对 Node.js 集成更深入与 Electron 类似,需关注 Chromium 的安全问题较大,同样需要集成 Chromium
FlutterDart + Skia (自绘引擎)Dart VM + C++ 引擎迅速崛起,由 Google 强力支持追求原生性能和 UI 一致性的移动、桌面及 Web 应用Dart 是类型安全的语言,自绘引擎减少了部分 Web 漏洞风险较小Skia 引擎和 AOT 编译提供了良好的性能和体积控制

基于 Electron 应用与工具

IDE 与开发工具

  • Visual Studio Code - 微软开发的现代化代码编辑器,以其丰富的功能、极速响应和卓越体验而广受欢迎
  • Postman - 强大的 API 开发和测试工具
  • GitKraken - Git 图形化客户端
  • Insomnia - API 调试和测试工具

数据库与管理工具

  • MongoDB Compass - MongoDB 的官方桌面管理工具
  • SQL Operations Studio - SQL Server 管理工具(现为 Azure Data Studio)

社交与通讯

  • Skype 桌面版 - 微软的即时通讯软件
  • WhatsApp 桌面版 - Meta 的即时通讯应用
  • Slack 桌面版 - 团队协作和沟通平台
  • 飞书 - 字节跳动的企业协作平台
  • Discord - 游戏玩家和社区的通讯应用

多媒体与娱乐

  • Nuclear - 音乐流媒体聚合应用
  • WebTorrent Desktop - 使用 P2P 协议播放音视频的应用
  • Spotify 桌面版 - 音乐流媒体服务
  • Twitch 桌面版 - 游戏直播平台

金融与交易

  • OpenFin - 金融交易平台框架
  • Mist - 早期的以太坊客户端
  • Brave 浏览器 - 由前 Mozilla CEO 和 JavaScript 之父 Brendan Eich 创建的注重隐私的浏览器

其他专业工具

  • 1Password - 密码管理工具
  • Figma 桌面版 - 界面设计协作工具
  • Notion 桌面版 - 笔记和项目管理工具
  • Obsidian - 知识管理和笔记应用
  • Lens - Kubernetes IDE

安装与配置

环境要求

在开始 Electron 开发之前,确保你的开发环境满足以下要求:

要求项最低版本推荐版本
Node.js16.x18.x LTS 或更高
npm8.x最新稳定版
操作系统Windows 7+, macOS 10.13+, Ubuntu 18.04+最新稳定版
内存4GB8GB+
磁盘空间5GB10GB+

💡 提示: 推荐使用 nvm (macOS/Linux) 或 nvm-windows 管理 Node.js 版本

镜像配置

由于 Electron 依赖包较大(约 100MB+),国内用户建议配置镜像源以加速下载。

方法一:npm 配置(推荐)

bash
# 配置 npm 淘宝镜像
npm config set registry https://registry.npmmirror.com
 
# 配置 Electron 二进制包镜像
npm config set electron_mirror https://npmmirror.com/mirrors/electron/
 
# 配置 Electron Builder 镜像(打包工具)
npm config set electron_builder_binaries_mirror https://npmmirror.com/mirrors/electron-builder-binaries/

方法二:环境变量

在终端配置文件(~/.bashrc~/.zshrc 或系统环境变量)中添加:

bash
# npm 镜像
export npm_config_registry=https://registry.npmmirror.com
 
# Electron 镜像
export ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/
 
# Electron Builder 镜像
export ELECTRON_BUILDER_BINARIES_MIRROR=https://npmmirror.com/mirrors/electron-builder-binaries/

方法三:.npmrc 文件

在项目根目录创建或编辑 .npmrc 文件:

ini
registry=https://registry.npmmirror.com
electron_mirror=https://npmmirror.com/mirrors/electron/
electron_builder_binaries_mirror=https://npmmirror.com/mirrors/electron-builder-binaries/

其他常用镜像源

镜像名称地址适用场景
淘宝镜像https://registry.npmmirror.com国内开发推荐
腾讯镜像https://mirrors.cloud.tencent.com/npm/备选方案
华为镜像https://mirrors.huaweicloud.com/repository/npm/备选方案
官方源https://registry.npmjs.org国外或需要最新版本

快速开始

安装并配置好环境后,可以快速创建第一个 Electron 应用:

bash
# 创建项目目录
mkdir my-electron-app && cd my-electron-app
 
# 初始化项目
npm init -y
 
# 安装 Electron
npm install electron --save-dev
 
# 启动应用(需要先创建 main.js 入口文件)
npm start

📖 下一步: 参考 第一个 Electron 应用 学习如何编写完整的 Electron 应用代码

常见问题

安装问题

Q: Electron 安装速度慢或失败怎么办?

A: 使用国内镜像源加速下载:

bash
# 方法1: 临时使用
ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ npm install electron --save-dev
 
# 方法2: 永久配置(推荐)
npm config set electron_mirror https://npmmirror.com/mirrors/electron/

Q: 安装 Electron 时提示权限错误?

A: 尝试以下解决方案:

bash
# macOS/Linux: 使用 sudo(不推荐)
sudo npm install electron --save-dev
 
# 更好的方案: 修复 npm 权限
sudo chown -R $(whoami) ~/.npm
sudo chown -R $(whoami) /usr/local/lib/node_modules

Q: Node.js 版本不兼容怎么办?

A: 使用 nvm 切换到兼容的 Node.js 版本:

bash
# 查看本地已安装的 Node.js 版本
nvm list
 
# 安装并切换到 Node.js 18
nvm install 18
nvm use 18
 
# 验证版本
node -v  # 应显示 v18.x.x
npm -v

开发问题

Q: 为什么 Electron 作为 devDependency?

A: 打包后的应用会包含 Electron 的二进制文件,运行时不需要单独依赖 Electron npm 包。因此只在开发阶段需要,作为开发依赖安装。

Q: 如何选择合适的 Electron 版本?

A: 建议遵循以下原则:

  • 新项目: 使用最新稳定版(查看 Electron Releases
  • 生产环境: 使用长期支持版本,避免频繁升级
  • 老项目升级: 充分测试后升级,查看 Breaking Changes

Q: macOS 和 Windows 的开发环境有什么区别?

A: 主要区别在于:

  • 文件路径: Windows 使用反斜杠 \,macOS/Linux 使用正斜杠 /(建议使用 path.join() 自动处理)
  • 应用菜单: macOS 应用菜单在系统菜单栏,Windows 在窗口内
  • 窗口行为: macOS 关闭窗口后应用不退出,Windows 默认退出
  • 打包工具: Windows 需要 code signing 证书,macOS 需要 Apple Developer 账号

性能问题

Q: Electron 应用体积太大怎么办?

A: 优化建议:

  1. 使用 ASAR 打包: 减少文件数量,提升加载速度
  2. 代码分割: 按需加载模块,减少初始加载体积
  3. 压缩资源: 压缩图片、字体等静态资源
  4. 剔除无用代码: 使用 Tree Shaking 清除未使用的代码
  5. 增量更新: 只下载更新的部分,而非整个应用

Q: Electron 应用内存占用高怎么办?

A: 优化策略:

  1. 及时销毁窗口: 关闭窗口后调用 win.destroy() 释放资源
  2. 减少后台进程: 避免创建不必要的隐藏窗口
  3. 优化 Web 内容: 减少 DOM 节点、优化图片、使用虚拟滚动
  4. 避免内存泄漏: 及时清理事件监听器、定时器、闭包引用
  5. 使用 DevTools 分析: 通过 Chrome DevTools 分析内存使用情况

安全问题

Q: 如何保证 Electron 应用的安全性?

A: 遵循 Electron 安全最佳实践:

javascript
// main.js
const mainWindow = new BrowserWindow({
  webPreferences: {
    // 启用上下文隔离(Electron 12+ 默认启用)
    contextIsolation: true,
    // 禁用 Node.js 集成(推荐)
    nodeIntegration: false,
    // 启用沙箱
    sandbox: true,
    // 预加载脚本
    preload: path.join(__dirname, 'preload.js')
  }
})

关键安全措施:

  1. ✅ 启用 contextIsolation
  2. ✅ 禁用 nodeIntegration
  3. ✅ 使用 preload.js 安全暴露 API
  4. ✅ 验证 IPC 消息来源和内容
  5. ✅ 设置 Content Security Policy (CSP)
  6. ✅ 不加载远程内容,或严格验证远程内容

Q: 如何防范 XSS 攻击?

A: 多层防护策略:

html
<!-- index.html -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">
javascript
// preload.js - 验证 IPC 通道白名单
const { contextBridge, ipcRenderer } = require('electron')
 
contextBridge.exposeInMainWorld('electronAPI', {
  send: (channel, data) => {
    const validChannels = ['toMain']
    if (validChannels.includes(channel)) {
      ipcRenderer.send(channel, data)
    }
  }
})

相关资源