前言
什么是 Electron
Electron 是一个使用 JavaScript、HTML 和 CSS 构建跨平台桌面应用程序的框架。
它基于 Node.js 和 Chromium,让你可以使用前端技术开发桌面应用。
主进程和渲染进程
- 主进程:运行 package.json 中 main 脚本的进程,负责创建和管理应用窗口
- 渲染进程:每个 Electron 窗口运行一个独立的渲染进程,显示网页内容
快速体验
将 html
页面封装成桌面端应用,可以在 Github 拉取 演示项目 理解原理
项目运行
拉取项目&下载依赖&运行
PowerShell
# Clone this repository
git clone https://github.com/electron/minimal-repro
# Go into the repository
cd minimal-repro
# Install dependencies
npm install
# Run the app
npm start
main.js 代码部分
JavaScript
// 引入控制应用生命周期和创建原生浏览器窗口的模块
const { app, BrowserWindow } = require('electron')
const path = require('node:path')
function createWindow () {
// 创建浏览器窗口
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
icon:'./build/icon.ico',
// frame: false, // 设置为无边框窗口
webPreferences: {
preload: path.join(__dirname, 'preload.js') // 预加载脚本
}
})
// 移除菜单栏
mainWindow.setMenu(null)
// 加载应用的 index.html 文件
mainWindow.loadFile('index.html')
// 打开开发者工具(调试用,默认注释掉)
// mainWindow.webContents.openDevTools()
}
// 当Electron完成初始化并准备创建浏览器窗口时调用此方法
// 某些API只能在此事件发生后使用
app.whenReady().then(() => {
createWindow()
app.on('activate', function () {
// 在macOS上,当点击dock图标且没有其他窗口打开时,
// 通常会重新创建一个窗口
if (BrowserWindow.getAllWindows().length === 0) createWindow()
})
})
// 当所有窗口都关闭时退出应用,除了macOS
// 在macOS上,应用及其菜单栏通常会保持活动状态,
// 直到用户使用Cmd + Q显式退出
app.on('window-all-closed', function () {
if (process.platform !== 'darwin') app.quit()
})
// 你可以在这个文件中添加应用特定的主进程代码
// 也可以将它们放在单独的文件中并在这里引入
preload.js 预加载脚本
JavaScript
/**
*预加载脚本在加载`index.html`之前运行
*在渲染器中。它可以访问web API以及
*Electron的渲染器处理模块和一些polyfill
*Node.js函数。 https://www.electronjs.org/docs/latest/tutorial/sandbox
*/
window.addEventListener('DOMContentLoaded', () => {
const replaceText = (selector, text) => {
const element = document.getElementById(selector)
if (element) element.innerText = text
}
for (const type of ['chrome', 'node', 'electron']) {
replaceText(`${type}-version`, process.versions[type])
}
})
效果展示

项目打包
使用 electron-builder 打包应用,下载依赖
PowerShell
npm install electron-builder --save-dev
# 或
yarn add electron-builder --dev
配置 package.json(在 package.json
中添加 build
配置,例如)
JSON
{
"name": "your-app-name",
"version": "1.0.0",
"main": "main.js",
"scripts": {
"start": "electron .",
"pack": "electron-builder --dir", // 生成未打包的应用程序(测试用)
"dist": "electron-builder" // 生成安装包
},
"build": {
"appId": "com.example.yourapp",
"productName": "YourApp",
"win": {
"target": "nsis", // Windows 安装包格式(也可以是 portable、zip 等)
"icon": "build/icon.ico" // 应用图标
},
"mac": {
"target": "dmg", // macOS 安装包格式
"icon": "build/icon.icns" // 应用图标
},
"linux": {
"target": "AppImage", // Linux 安装包格式
"icon": "build/icon.png" // 应用图标
}
},
"devDependencies": {
"electron": "^latest",
"electron-builder": "^latest"
}
}
关键配置说明
appId
:应用唯一标识(如com.company.appname
)。productName
:应用名称(显示在安装界面)。win
/mac
/linux
:不同平台的打包配置。target
:打包格式(如 Windows 的nsis
、macOS 的dmg
、Linux 的AppImage
)。icon
:应用图标路径(需提前准备.ico
、.icns
或.png
文件)
准备应用图标(你可以使用在线工具(如 icoconvert)生成这些图标,并放在 build/
目录下)
项目目录
your-project/
├── build/
│ ├── icon.ico # Windows 图标
│ ├── icon.icns # macOS 图标
│ └── icon.png # Linux 图标
├── main.js # Electron 主进程文件
├── package.json
└── ...
运行打包命令(需要以管理员的方式打开终端才可以打包资源文件)
PowerShell
npm run dist
# 或
yarn dist
打包完成后,生成的安装文件会存放在 dist/
目录:
- Windows:
your-app-setup.exe
(NSIS 安装包)或your-app-portable.exe
(绿色版) - macOS:
your-app.dmg
(安装镜像)或your-app.app
(可直接运行) - Linux:
your-app.AppImage
(可执行文件)
可选:代码签名(发布正式版)
如果要发布到应用商店或防止安全警告,需要对应用进行签名
- Windows:使用
signtool
或购买代码签名证书(如 DigiCert)。 - macOS:需要 Apple 开发者账号,使用
codesign
。 - Linux:通常不需要签名。
在package.json
的build
配置中添加签名信息
PowerShell
"win": {
"target": "nsis",
"signingHashAlgorithms": ["sha256"],
"certificateFile": "path/to/cert.pfx",
"certificatePassword": "your-password"
},
"mac": {
"target": "dmg",
"identity": "Developer ID Application: Your Name (TEAMID)"
}
效果展示

将 html 页面封装成桌面端