如果你是一名前端工程师,是不是总羡慕桌面开发能做出独立客户端、摆脱浏览器限制?想开发一款工具类客户端、桌面小程序、办公软件,却又不想从零学习 C++、Swift、Win32 等复杂的桌面开发技术?
今天给大家拆解 GitHub 顶级开源项目 electron/electron —— 一款彻底颠覆桌面开发生态的框架。它让只用 HTML、CSS、JavaScript 就能开发跨 Windows、macOS、Linux 三大系统的原生桌面应用,如今 VS Code、Postman、Notion、ChatGPT 桌面端等上亿用户的主流软件,全都是基于它打造而成。
本文从项目背景、核心原理、环境搭建、代码实战、打包上线、避坑指南全维度讲解,零基础前端也能跟着做出第一款桌面应用,建议收藏反复练习!
一、认识 Electron:GitHub 出品,前端开发者的「桌面开发神器」
1.1 项目基础信息
项目地址:https://github.com/electron/electron Electron 原名 Atom Shell,由 GitHub 团队 开源并长期维护,诞生初衷是为了开发 GitHub 自家的 Atom 代码编辑器,如今已成为全球跨平台桌面应用的
事实标准框架。
它基于宽松的 MIT 开源协议,个人项目、商业产品均可免费使用,无版权顾虑,这也是各大互联网公司纷纷选择它的核心原因之一。
1.2 核心本质:一句话读懂 Electron
很多人疑惑:前端代码怎么能变成桌面软件? 公式总结:Electron = Chromium 浏览器内核 + Node.js + 系统原生 API
- Chromium:负责渲染页面,也就是我们熟悉的 HTML/CSS/JS 界面,完美兼容现代前端语法;
- Node.js:赋予前端代码操作系统底层能力,可直接读写本地文件、调用网络、操作目录;
- 原生系统 API:封装了窗口、托盘、系统通知、右键菜单、弹窗等桌面应用专属功能。
简单理解:Electron 相当于给网页套上了一层桌面应用外壳,同时打通了浏览器和本地系统的壁垒,让前端代码拥有原生桌面软件的能力。
1.3 哪些明星产品在用 Electron?(看完你就知道它有多强大)
Electron 并非小众玩具,而是工业级成熟框架,日常你高频使用的软件大多基于它开发:
- 开发工具类:VS Code(全球第一代码编辑器)、GitHub Desktop、Postman、Atom;
- 办公协作类:Notion、Slack、Microsoft Teams、飞书部分桌面组件;
- 热门应用类:ChatGPT 桌面端、Discord、Spotify 音乐客户端、Figma 桌面版;
- 小众工具:各类截图工具、本地笔记软件、离线爬虫工具、内部办公系统等。
可以说:只要是偏轻量化、界面复杂、迭代快的桌面应用,优先选择 Electron。
1.4 Electron 核心优势(对比传统桌面开发)
- 技术栈零门槛前端开发者无需学习新语言,Vue/React/Angular 等主流框架可直接无缝接入,原有前端技术栈全部复用。
-
真正一套代码跨三端编写一次代码,即可打包出 Windows(exe)、macOS(dmg/app)、Linux(deb/rpm)安装包,省去多端适配成本。
- 生态超级丰富完全兼容 npm 百万级第三方包,文件处理、网络请求、数据解析等需求直接调用现成工具。
- 开发效率碾压传统桌面网页热更新、实时调试、界面快速迭代,相比 C++/Qt 开发,开发周期至少缩短 50% 以上。
- 原生能力拉满支持系统托盘、全局快捷键、桌面通知、文件拖拽、自动更新等原生桌面功能,媲美原生软件。
二、核心架构拆解:双进程模型(入门必懂,避免后续踩坑)
Electron 最核心的设计是 主进程 + 渲染进程 双进程架构,这也是它和普通网页最大的区别,理解这部分,你就搞定了一半原理。
2.1 主进程(Main Process)
- 入口文件:项目根目录
main.js,整个应用的入口和总指挥; - 运行环境:完整 Node.js 环境,拥有最高权限;
- 核心职责:管理应用生命周期、创建和关闭窗口、调用系统原生 API、管理菜单/托盘/全局快捷键;
- 数量:一个 Electron 应用只有一个主进程。
2.2 渲染进程(Renderer Process)
- 载体:每一个应用窗口对应一个独立渲染进程(类似浏览器的标签页);
- 运行环境:默认是浏览器环境(可按需配置),负责展示 HTML 页面、执行前端交互逻辑;
- 数量:多窗口应用会存在多个渲染进程,进程之间相互隔离,提升稳定性。
2.3 进程通信(IPC)
渲染进程(页面)无法直接调用系统底层 API,必须通过 IPC(进程间通信) 向主进程发送请求,由主进程执行操作后再返回结果。 同时 Electron 提供 contextBridge 安全桥接方案,杜绝直接暴露 Node API 带来的安全风险,这也是官方强制推荐的写法。
三、从零实战:5 分钟搭建第一个 Electron 桌面应用(代码可直接复制)
前置准备
- 安装 Node.js(LTS 长期支持版)(必备,建议 16+ 版本),配置好 npm 环境;
- 终端工具(Windows CMD/PowerShell、Mac/Linux 终端)。
步骤 1:初始化项目 & 安装依赖
依次执行以下终端命令,全程无复杂配置:
# 1. 创建项目文件夹并进入
mkdir my-first-electron && cd my-first-electron
# 2. 初始化 package.json(默认配置)
npm init -y
# 3. 安装 Electron 开发依赖
npm install electron --save-dev
步骤 2:编写核心文件(共 3 个基础文件)
在项目根目录新建 3 个文件,完整目录结构如下:
my-first-electron/
├── package.json # 项目配置、启动脚本
├── main.js # 主进程入口(核心)
├── preload.js # 预加载脚本(安全桥接)
└── index.html # 渲染页面(前端界面)
1)配置 package.json
修改 scripts 启动命令,并指定主进程入口:
{
"name": "my-first-electron",
"version": "1.0.0",
"main": "main.js", // 指定主进程入口文件(必填)
"scripts": {
"start": "electron ."// 启动命令:npm start
},
"devDependencies": {
"electron": "^最新版本号"
}
}
2)主进程 main.js(核心代码)
负责创建窗口、管理应用生命周期,代码附带详细注释:
// 引入 Electron 核心模块
const { app, BrowserWindow } = require('electron')
const path = require('path')
// 定义创建窗口的函数
function createWindow () {
// 实例化桌面窗口,配置窗口属性
const mainWindow = new BrowserWindow({
width: 800,
// 窗口宽度
height: 600, // 窗口高度
title: "我的第一个Electron桌面应用",
// 预加载脚本配置(安全必备)
webPreferences: {
preload: path.join(__dirname, 'preload.js'),
contextIsolation: true, // 开启上下文隔离(安全规范)
nodeIntegration: false// 关闭Node集成,防止安全漏洞
}
})
// 加载本地 HTML 页面(渲染进程)
mainWindow.loadFile('index.html')
// 开发环境自动打开调试控制台(上线可注释)
mainWindow.webContents.openDevTools()
}
// 应用准备就绪后,创建窗口
app.whenReady().then(createWindow)
// 所有窗口关闭时,退出应用(兼容 Windows/Linux)
app.on('window-all-closed', () => {
// macOS 特殊逻辑:窗口关闭后应用不退出,遵循系统习惯
if (process.platform !== 'darwin') app.quit()
})
// macOS 激活应用时,若无窗口则重新创建
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) createWindow()
})
3)预加载脚本 preload.js(安全通信)
使用 contextBridge 安全地将主进程能力暴露给渲染进程,是官方标准写法:
const { contextBridge } = require('electron')
// 向页面暴露全局变量,获取当前操作系统
contextBridge.exposeInMainWorld('electronAPI', {
platform: process.platform
})
4)页面文件 index.html(前端界面)
普通 HTML 即可,和网页开发完全一致:
html>
<html lang="zh-CN">
<head>
<
meta charset="UTF-8">
<title>Electron 演示页面title>
<style>
body { text-align: center; margin-top: 100px; font-size: 18px; }
style>
head>
<body>
<h1>🎉 恭喜!Electron 应用启动成功h1>
<p>当前操作系统:<span id="platform">span>p>
<script>
// 调用预加载暴露的 API
document.getElementById('platform').innerText = window.electronAPI.platform
script>
body>
html>
步骤 3:启动应用
终端执行启动命令:
npm start
几秒后,你就能看到一个独立的桌面窗口,页面正常展示操作系统信息,第一款 Electron 桌面应用制作完成!
四、项目打包:把代码变成可安装的桌面软件
写完代码后,我们需要将项目打包为
.exe(Windows)、.dmg(Mac)等安装包,推荐业界主流打包工具 electron-builder。
4.1 安装打包工具
npm install electron-builder --save-dev
4.2 配置打包脚本
修改 package.json,新增打包命令和打包配置:
"scripts": {
"start": "electron .",
"package-win": "electron-builder --win", // 打包Windows安装包
"package-mac": "electron-builder --mac", // 打包Mac安装包
"package-linux": "electron-builder --linux"// 打包Linux安装包
},
"build": {
"appId": "com.demo.electron", // 应用唯一标识
"productName": "我的桌面工具", // 应用名称
"win": {
"target": "nsis"// Windows 安装包格式
},
"mac": {
"target": "dmg"// Mac 安装包格式
}
}
4.3 执行打包
# 打包 Windows 版本
npm run package-win
打包完成后,项目根目录会生成 dist 文件夹,里面就是可直接分发、安装的桌面软件安装包。
小贴士:跨系统打包存在限制,Windows 系统只能打包 Windows 安装包,Mac 系统可打包 Mac/Windows 包。
五、进阶方向 & 最佳实践(避坑+优化,生产环境必备)
5.1 技术栈搭配(主流组合)
- 原生 HTML/CSS/JS:简单工具、轻量客户端首选,体积小、启动快;
- Vue + Electron:国内最主流组合,上手简单、生态完善,适合管理系统、桌面工具;
-
React + Electron:适合复杂交互、大型桌面应用,VS Code 便是基于 React + Electron;
- TypeScript + Electron:中大型项目强制推荐,提升代码可维护性,减少线上 bug。
5.2 安全加固(重中之重)
Electron 早期因安全问题饱受诟病,官方现已明确规范,生产环境必须遵守:
- 关闭
nodeIntegration(禁止渲染进程直接使用 Node API); - 开启
contextIsolation 上下文隔离; - 所有进程通信统一使用
contextBridge,不暴露敏感 API;
5.3 性能优化(解决 Electron 「体积大、启动慢」痛点)
- CPU 密集型任务使用 Web Workers,避免页面卡顿;
5.4 常见拓展功能(工作高频需求)
六、总结 & 学习路线
6.1 为什么前端一定要学 Electron?
- 拓宽职业边界:从「网页开发」升级为「全栈桌面+前端」,提升职场竞争力;
- 低成本落地产品:个人开发者、小团队无需多端开发,快速制作独立桌面工具变现;
- 就业加分项:中大型互联网公司、工具类软件团队,Electron 已是刚需技能。
6.2 新手学习路线(由浅入深)
- 复刻简易 Demo(记事本、计算器、本地阅读器);
- 参考 GitHub 开源 Electron 项目(如 electron/electron 官方示例)研读源码。
6.3 资源推荐
- 官方仓库:https://github.com/electron/electron(源码、版本更新、Issue 答疑)
- 官方文档:https://www.electronjs.org/zh/docs(最全 API 文档,权威参考)
文末互动
你平时使用过哪些 Electron 开发的软件?想尝试用 Electron 开发什么类型的桌面工具?欢迎在评论区留言交流!转发本文给身边的前端伙伴,一起解锁桌面开发新技能~