Electron 中的发布与部署
发布(Release)与部署(Deployment)是 Electron 应用从开发完成到交付用户手中的最后环节。主要涉及:生成版本化的安装包、上传到分发渠道、实现自动更新,以及在生产环境中稳定运行。以下基于 2025 年最新实践(electron-builder + electron-updater + 主流平台)进行总结。
1. 发布流程概述
典型发布流程:
- 递增版本号(package.json 的
version) - 构建前端资源(Vite/Webpack 等)
- 使用打包工具生成安装包(.exe/.dmg/.AppImage 等)
- 代码签名与公证(生产必备)
- 上传安装包到分发服务器(GitHub Releases、S3、私有服务器等)
- 触发自动更新检测(用户下次启动时提示更新)
2. 主流分发渠道与自动更新方案
| 方案 | 适用平台 | 优点 | 缺点/要求 | 配置难度 |
|---|---|---|---|---|
| GitHub Releases | Win/mac/Linux | 最简单、私有仓库也支持、免费、electron-updater 原生支持 | 需要 GitHub 账号,发布频率受限(rate limit) | ★☆☆☆☆ |
| S3 + CloudFront | Win/mac/Linux | 高性能 CDN、可控权限、适合企业 | 需要 AWS 账号、配置签名 URL | ★★☆☆☆ |
| Azure Blob / Google Cloud | Win/mac/Linux | 类似 S3,适合对应云用户 | 配置复杂 | ★★★☆☆ |
| 自建服务器(如 Nutstore) | Win/mac/Linux | 完全可控、国内访问快 | 需要维护服务器、HTTPS 证书 | ★★★★☆ |
| 应用商店分发 | macOS/Windows | Mac App Store、Microsoft Store(侧载或商店上架) | 严格审核、需付费证书、无法自动更新(商店版) | ★★★★★ |
2025 年推荐:GitHub Releases + electron-updater(90% 项目首选)。
3. electron-updater 自动更新配置(关键代码)
安装:
npm install electron-updater
主进程实现(main.js):
const { app, autoUpdater, dialog } = require('electron');
const { electronUpdater } = require('electron-updater');
// 可选:设置日志
electronUpdater.logger = require('electron-log');
autoUpdater.on('checking-for-update', () => {
console.log('正在检查更新...');
});
autoUpdater.on('update-available', (info) => {
dialog.showMessageBox({
type: 'info',
title: '发现新版本',
message: `发现新版本 ${info.version},是否立即下载?`,
buttons: ['是', '稍后']
}).then((res) => {
if (res.response === 0) autoUpdater.downloadUpdate();
});
});
autoUpdater.on('update-downloaded', () => {
dialog.showMessageBox({
title: '更新已就绪',
message: '更新下载完成,应用将重启以应用更新。',
buttons: ['立即重启']
}).then(() => {
autoUpdater.quitAndInstall();
});
});
// 应用就绪后检查更新(推荐延迟几秒,避免启动卡顿)
app.whenReady().then(() => {
setTimeout(() => {
autoUpdater.checkForUpdatesAndNotify(); // 或 checkForUpdates()
}, 5000);
});
package.json publish 配置(与 electron-builder 结合):
"build": {
"publish": [
{
"provider": "github",
"owner": "your-username",
"repo": "your-repo",
"private": false, // private: true 也支持(需 token)
"releaseType": "release" // draft/release/prerelease
}
]
}
4. CI/CD 自动化发布(强烈推荐)
使用 GitHub Actions 实现一键发布:
示例 workflow(.github/workflows/release.yml):
name: Release
on:
push:
tags:
- 'v*'
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [macos-latest, windows-latest, ubuntu-latest]
steps:
- uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npm run build:frontend # 构建 React/Vite 等
- name: Build & Publish
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# macOS 公证
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
# Windows 签名
CSC_LINK: ${{ secrets.CSC_LINK }}
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
run: npm run release # electron-builder --publish always
触发方式:打 tag git tag v1.2.0 && git push --tags
5. 生产部署注意事项
- 版本递增:每次发布必须提升
package.json的version,否则更新检测失败。 - 增量更新:electron-updater 支持差分更新(macOS/Linux 更明显),可大幅减少下载体积。
- 静默更新:可用
checkForUpdates()+ 后台下载 + 手动提示。 - 错误处理:捕获
error事件,记录日志,避免更新失败崩溃。 - 多渠道发布:可同时配置多个 publish provider,按平台选择。
- 企业内网部署:禁用自动更新,手动分发安装包,或自建更新服务器。
6. 常见问题与解决方案
- 更新卡在“下载中”:检查服务器是否支持 Range 请求(GitHub 支持)。
- macOS 公证失败:确保 Hardened Runtime 和正确 entitlements。
- Windows SmartScreen 警告:必须使用 EV 代码签名证书。
- Linux 更新复杂:AppImage + 自建服务器最可靠。
完整的发布与部署链路:GitHub + electron-builder + electron-updater + GitHub Actions 是当前最成熟、最高效的组合,能实现从代码提交到用户自动更新的全自动化。如果你计划上架应用商店或有企业级部署需求(如离线更新、自定义 CDN),可以提供更多细节,我可以给出针对性方案!