跳到主内容

生态系统 2023 年回顾

·阅读 6 分钟

回顾 2023 年 Electron 开发者生态系统的改进和变化。


在过去的几个月里,我们一直在对 Electron 生态系统进行一些改进,以提升 Electron 应用的开发者体验!以下是来自 Electron 总部的最新功能快速概览。

Electron Forge 7 及更高版本

Electron Forge 7——我们用于打包和分发 Electron 应用的一体化工具的最新主要版本——现已可用。

虽然 Forge 6 是对 v5 的完全重写,但 v7 的范围较小,但仍包含一些重大更改。未来,随着需要进行重大更改,我们将继续发布 Forge 的主要版本。

有关更多详细信息,请参阅 GitHub 上的完整 Forge v7.0.0 更改日志

重大更改

  • macOS 公证已切换到 notarytool 截至 2023 年 11 月 1 日,Apple 停止支持 macOS 公证的传统 altool,此版本将其从 Electron Forge 中完全移除。
  • 最低 Node.js 版本增加到 v16.4.0:在此版本中,我们将所需的最低 Node.js 版本设置为 16.4.0。
  • 放弃支持 electron-prebuiltelectron-prebuilt-compileelectron-prebuilt 是 Electron 的 npm 模块的原始名称,但在 v1.3.1 中被 electron 替换。electron-prebuilt-compile 是该二进制文件的一个替代品,具有增强的 DX 功能,但最终作为一个项目被放弃了。

亮点

  • Google Cloud Storage 发布器作为我们更好地支持静态自动更新的努力的一部分,Electron Forge 现在支持直接发布到 Google Cloud Storage!
  • ESM forge.config.js 支持Electron Forge 现在支持 ESM forge.config.js 文件。(P.S. 期待 Electron 28 中对 ESM 入口点的支持。)
  • Makers 现在并行运行在 Electron Forge 6 中,Makers 是出于 ✨ 传统 ✨ 原因而顺序运行的。从那时起,我们已经测试了 Make 步骤的并行化,没有发现任何不良副作用,因此在为同一平台构建多个目标时,您应该会看到速度提升!
谢谢!

🙇 非常感谢 mahnunchik 在 Forge 配置中对 GCS 发布器和 ESM 支持的贡献!

更好的静态存储自动更新

Squirrel.Windows 和 Squirrel.Mac 是平台特定的更新技术,它们支持 Electron 内置的 autoUpdater 模块。这两个项目都通过两种方法支持自动更新

  • 兼容 Squirrel 的更新服务器
  • 托管在静态存储提供商(例如 AWS、Google Cloud Platform、Microsoft Azure 等)上的清单 URL

更新服务器方法传统上是 Electron 应用的推荐方法(并提供更新逻辑的额外自定义),但它有一个主要缺点——如果应用是闭源的,它需要应用维护自己的服务器实例。

另一方面,静态存储方法一直都是可行的,但在 Electron 内部没有文档记载,并且在 Electron 工具包中的支持也很差。

@MarshallOfSound 的出色工作下,无服务器自动应用更新的更新流程得到了极大简化

  • Electron Forge 的 Zip 和 Squirrel.Windows 创建器现在可以配置为输出与 autoUpdater 兼容的更新清单。
  • 新版主要版本 update-electron-app (v2.0.0) 现在可以读取这些生成的清单,作为 update.electronjs.org 服务器的替代方案。

一旦您的 Makers 和 Publishers 配置为将更新清单上传到云文件存储,您只需几行配置即可启用自动更新

const { updateElectronApp, UpdateSourceType } = require('update-electron-app');

updateElectronApp({
updateSource: {
type: UpdateSourceType.StaticStorage,
baseUrl: `https://my-manifest.url/${process.platform}/${process.arch}`,
},
});
延伸阅读

📦 想了解更多?有关详细指南,请参阅 Forge 的自动更新文档

@electron/ 扩展宇宙

当 Electron 首次启动时,社区发布了许多包来增强开发、打包和分发 Electron 应用的体验。随着时间的推移,其中许多包被纳入 Electron 的 GitHub 组织,由核心团队承担维护负担。

2022 年,我们开始在 npm 上将所有这些第一方工具统一到 @electron/ 命名空间下。这一变化意味着过去名为 electron-foo 的包现在在 npm 上是 @electron/foo,而过去名为 electron/electron-foo 的仓库现在在 GitHub 上是 electron/foo。这些变化有助于明确区分第一方项目和用户项目。这包括许多常用包,例如

  • @electron/asar
  • @electron/fuses
  • @electron/get
  • @electron/notarize
  • @electron/osx-sign
  • @electron/packager
  • @electron/rebuild
  • @electron/remote
  • @electron/symbolicate-mac
  • @electron/universal

未来,我们发布的所有第一方包也将位于 @electron/ 命名空间中。此规则有两个例外

  • Electron 核心将继续以 electron 包的形式发布。
  • Electron Forge 将继续以 @electron-forge/ 命名空间的形式发布其所有 monorepo 包。
求星

⭐ 在此过程中,我们还意外地将 electron/packager 仓库设为私有,这不幸地导致我们的 GitHub 星标数被清除(清除前超过 9000 个)。如果您是 Packager 的活跃用户,我们将非常感谢您点亮 ⭐ 星标 ⭐!

引入 @electron/windows-sign

自 2023 年 6 月 1 日起,行业标准开始要求 Windows 代码签名证书的密钥存储在符合 FIPS 标准的硬件上。

实际上,这意味着对于在 CI 环境中构建和签名的应用来说,代码签名变得困难得多,因为许多 Electron 工具将证书文件和密码作为配置参数,并尝试使用硬编码逻辑从那里进行签名。

这种情况一直是 Electron 开发者的一个常见痛点,这就是为什么我们一直在研究一个更好的解决方案,将 Windows 代码签名隔离到其独立的步骤中,类似于 @electron/osx-sign 在 macOS 上的做法。

将来,我们计划将此包完全集成到 Electron Forge 工具链中,但它目前是独立的。该包目前可以通过 npm install --save-dev @electron/windows-sign 进行安装,并可以通过编程方式或通过 CLI 使用。

请试用它并在仓库的问题跟踪器中向我们提供您的反馈!

下一步是什么?

下个月我们将进入一年一度的十二月静默期。在此期间,我们将思考如何在 2024 年进一步改善 Electron 开发体验。

您希望我们接下来从事哪些工作?请告诉我们!