首页 / Electron 入门教程 / 分发与安装包

Electron 入门教程

分发与安装包

本教程共 45 篇 · 第 35 篇 · 更新于 2026-08-03

Electron分发安装包dmgexeAppImage自动更新体积优化

35. 分发与安装包

应用签名完成后,真正的目标才出现:让用户轻松拿到并安装它。不同操作系统偏爱不同的安装包格式,自动更新则决定了用户是否愿意长期留用。本章梳理主流分发格式、更新机制与体积优化,帮你把应用顺畅交到用户手中。

本节目标

  • 认识各平台的主流安装包格式与适用场景。
  • 了解 Electron 自动更新的两种实现思路。
  • 掌握常见分发渠道与取舍。
  • 用几种手段给安装包瘦身。
  • 建立「签名是分发前提」的整体认知。

1-1 各平台安装包格式

安装包格式由操作系统习惯决定。选错格式会增加用户门槛,选对应格式则能顺滑安装。

macOS:.dmg.zip .dmg 是磁盘镜像,用户拖拽应用进「应用程序」文件夹即可,是最常见形式。.zip 则更轻量,适合内部分发。两者都要求先完成上一章的签名与公证。

Windows:.exe.msi 通过 Forge 的 maker-squirrel 生成 .exe 安装程序(基于 Squirrel.Windows,支持自动更新);maker-wix 生成 .msi(企业环境常见,但不自带更新器)。Windows 用户熟悉「下一步式」安装,.exe 体验最佳。

Linux:.deb.rpm、AppImage、Flatpak、Snap。 这是最碎片化的平台。Debian/Ubuntu 系用 .deb,Red Hat/Fedora 系用 .rpmAppImage 是单文件、免安装、双击即跑,跨发行版通用,分发最简单。FlatpakSnap 则是沙箱化的应用商店格式,需上架对应仓库。

对照:Windows 主推 .exe(Squirrel)便于自带更新;macOS 主推 .dmg;Linux 若图省事优先 AppImage,若要进商店则用 Flatpak/Snap。

1-2 自动更新服务

用户装上一次不难,难的是让他们一直用最新版。Electron 的 autoUpdater 模块能让应用后台检测并安装更新,无需用户手动下载。

官方内置的 autoUpdater 依赖一个更新服务器,提供版本清单与增量文件。常见方案有:

  • electron-release-server:自建开源更新服务。
  • update.electronjs.org:GitHub Releases 驱动的官方托管服务,适合开源项目,零运维。
  • electron-builder 的 electron-updater:社区最流行的更新库,支持 GitHub、S3、私有服务器,配置简单(注意它属于 electron-builder 生态,与 Forge 的 autoUpdater 是不同实现)。

无论用哪种,更新服务器返回的元数据必须与本地 app.getVersion() 匹配,且更新文件本身也要签名,否则会被系统拒绝。

提示:Squirrel.Windows 的 .exe 安装器天然配合 autoUpdater 做增量更新;而 .msi 与多数 Linux 格式不自带此能力,需自行设计更新流程。

1-3 分发渠道怎么选

最直接的方式是把安装包上传到自己的官网或对象存储,生成一个下载链接。这种方式完全可控,但要求你已签名,否则用户会被安全警告劝退。

要触达更多用户,可上架各平台的软件商店:Mac App Store、Windows Store、Snapcraft(Linux)。它们带来流量,但各自要求不同的打包格式与审核,工作量高于直链下载。开源项目则可利用 GitHub Releases 分发,配合 update.electronjs.org 实现免费更新。

选择建议:个人或小团队先做官网直链 + GitHub Releases;有精力再考虑上架商店。不要一开始就被多平台商店的复杂度拖垮。

1-4 安装包体积优化

Electron 应用自带 Chromium 与 Node.js 运行时,安装包天生比原生程序大(常达几十到上百 MB)。以下手段可明显瘦身:

1. 启用 asar 归档。 把源码打进 asar 能压缩体积并加速加载(见第 33 章)。

2. 依赖裁剪(prune)。 @electron/packager 默认只打包 dependencies,忽略 devDependencies。确认 package.json 里测试、构建类依赖都放在 devDependencies,可砍掉大量无用文件。

3. 用 .gitignore / .electronignore 排除文件。 Forge 会读取忽略规则,避免把源码仓库、node_modules 里的文档、测试目录打进安装包。

4. 只打包目标平台。 在对应系统上 make 该平台的包,不要试图一次跨平台构建(Electron 不原生支持交叉编译安装器)。

5. 精简原生模块。 原生模块会带 .node 文件与运行时库,体积可观。能用品纯 JS 实现就避免引入。

1-5 分发前的检查清单

把应用交给用户前,建议逐项核对:安装包是否已签名、macOS 是否完成公证、更新服务器地址是否正确、各平台入口路径是否用 process.resourcesPath 动态获取、.gitignore 是否排除了 out/ 与密钥。

任何一项疏漏都会在用户端变成「打不开」「更新失败」的工单。签名(第 34 章)是这一切的前提。

常见误区

  • 认为 AppImage 需要安装。它是单文件免安装格式,双击即运行,但首次需赋予可执行权限。
  • .msi 期望自动更新。maker-wix 生成的 MSI 不自带更新器,需自行设计更新流程。
  • 忽略体积优化。不裁剪 devDependencies、不打 asar,安装包会虚增数十 MB。
  • 未签名就分发。没有签名,macOS 与 Windows 都会强力拦截,用户流失严重。

1-6 更新服务器的注意事项

无论选哪种更新方案,服务端返回的版本清单必须与本地 app.getVersion() 一致,否则 autoUpdater 无法判断是否需要更新。更新文件本身也必须签名,否则系统拒绝应用。对开源项目,update.electronjs.org 配合 GitHub Releases 几乎是零成本方案;闭源或企业内部分发则自建 electron-release-server 更可控。上线前务必在真实网络环境验证一次完整更新链路。

1-7 用户体验细节

分发不只是技术传递,还关乎第一印象。下载页应明确标注各平台安装包与系统版本要求;更新说明写清变更,能降低用户焦虑。即便是小团队,一份清晰的发布说明也比静默更新更赢得信任。把安装包校验和(如 SHA-256)一并公布,也能帮助用户确认下载未被篡改。

小结

本章覆盖了安装包格式、自动更新、分发渠道与体积优化。分发不是「传个文件」那么简单,而是签名、更新、渠道共同构成的最后一公里。下一章我们回到开发期,讲如何用 DevTools 与主进程调试定位问题。