Electron 打包与分发

Electron 中的打包与分发

打包是将 Electron 应用从开发环境转换为可分发的独立桌面安装包的过程(Windows: .exe/.msi;macOS: .dmg/.app;Linux: .deb/.rpm/.AppImage)。官方推荐使用成熟的打包工具,避免手动操作。以下基于 2025 年最新实践总结。

1. 主流打包工具对比

工具优点缺点/注意事项支持平台推荐场景
electron-builder配置最简单、功能最全(自动更新、代码签名、多种格式、多语言安装器)依赖较多,偶尔配置复杂Win/mac/Linux首选,大多数项目
electron-forge官方推荐,模块化(支持多种 maker),与 Webpack/Vite 集成好配置稍繁琐,自动更新需额外插件Win/mac/Linux喜欢模块化、需要自定义流程
electron-packager最轻量、简单快速只打包不生成安装器,需手动签名/公证Win/mac/Linux快速原型、内部分发
electron-updater + builder与 builder 结合实现自动更新所有需要自动更新的应用

2025 年推荐electron-builder(社区最活跃,文档最全)。

2. 使用 electron-builder 打包(推荐流程)

安装

npm install --save-dev electron-builder

package.json 配置(关键部分):

{
  "name": "my-app",
  "version": "1.0.0",
  "main": "main.js",
  "scripts": {
    "build": "electron-builder",
    "dist:win": "electron-builder --win",
    "dist:mac": "electron-builder --mac",
    "dist:linux": "electron-builder --linux"
  },
  "build": {
    "appId": "com.example.myapp",
    "productName": "MyApp",
    "directories": {
      "output": "dist"               // 输出目录
    },
    "files": [
      "dist-electron/**/*",          // Vite/Webpack 输出
      "main/**/*"
    ],
    "win": {
      "target": [
        { "target": "nsis", "arch": ["x64", "ia32"] },   // 安装器
        { "target": "portable" }                         // 便携版
      ],
      "icon": "build/icon.ico"
    },
    "mac": {
      "target": ["dmg", "zip"],
      "icon": "build/icon.icns",
      "hardenedRuntime": true,
      "gatekeeperAssess": false,
      "entitlements": "build/entitlements.mac.plist"
    },
    "linux": {
      "target": ["AppImage", "deb", "rpm"],
      "icon": "build/icons"
    },
    "nsis": {
      "oneClick": false,             // 多语言安装器
      "allowToChangeInstallationDirectory": true
    }
  }
}

常见打包命令

# 打包所有平台
npm run build

# 只打包当前平台
npm run build -- --publish never

# 发布(配合自动更新)
npm run build -- --publish always

3. 代码签名与公证(必须,用于生产发布)

平台要求操作方式
WindowsSmartScreen 信任、病毒扫描使用 EV 代码签名证书(DigiCert、Sectigo)
CSC_LINKCSC_KEY_PASSWORD 环境变量
macOSGatekeeper、Notarization(公证)必备– Apple Developer ID 证书
– 启用 Hardened Runtime
– electron-builder 自动公证(需 APPLE_IDAPPLE_ID_PASSWORD
Linux无强制,但 AppImage 可签名可选 GPG 签名

4. 自动更新(Squirrel / electron-updater)

推荐使用 electron-updater(与 builder 无缝集成)。

配置

npm install electron-updater

主进程代码

const { autoUpdater } = require('electron-updater');

autoUpdater.on('checking-for-update', () => { /* ... */ });
autoUpdater.on('update-available', () => { /* 提示用户 */ });
autoUpdater.on('update-downloaded', () => { autoUpdater.quitAndInstall(); });

// 启动时检查
app.whenReady().then(() => {
  autoUpdater.checkForUpdatesAndNotify();
});

发布服务器选项

  • GitHub Releases(最简单,private repo 也支持)
  • S3 / Azure / 自建服务器
  • Electron 的官方发布服务(如 Nutstore)

builder 配置(package.json):

"publish": [
  {
    "provider": "github",
    "owner": "yourname",
    "repo": "my-app"
  }
]

5. 最佳实践与常见坑

  • 开发 vs 生产:使用 vite build / webpack 先构建前端资源,再打包 Electron。
  • ASAR 打包:默认启用,保护源码(但非加密);敏感代码可混淆或用 bytenode。
  • 体积优化:排除 devDependencies;使用 prune;压缩 executable(UPX)。
  • 跨平台构建:推荐 CI(如 GitHub Actions):
  • Windows/macOS runner 构建对应平台
  • Linux 用 Docker
  • 版本管理:每次发布前递增 version,否则更新检测失败。
  • 测试安装包:在干净虚拟机中测试安装、卸载、更新流程。

使用 electron-builder + electron-updater + GitHub Releases 的组合,是当前最成熟、最省心的打包与分发方案。如果你的项目使用 Vite + React/Vue 或有特殊需求(如企业内部分发、自定义安装器),可以提供更多信息,我可以给出更精确的配置示例!

文章已创建 4391

发表回复

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

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部