跳到主要内容

Electron 26.0.0

·2 分钟阅读

Electron 26.0.0 已发布!它包括 Chromium 116.0.5845.62、V8 11.2 和 Node.js 18.16.1 的升级。阅读下文了解更多详情!


Electron 团队很高兴地宣布 Electron 26.0.0 的发布!您可以通过 npm 使用 npm install electron@latest 安装它,或者从我们的 发布网站 下载它。继续阅读以了解有关此版本的详细信息。

如果您有任何反馈,请在 Twitter 上与我们分享,或加入我们的社区 Discord!错误和功能请求可以在 Electron 的 issue tracker 中报告。

值得注意的变更

堆栈变更

重大变更

已弃用:webContents.getPrinters

webContents.getPrinters 方法已被弃用。请改用 webContents.getPrintersAsync

const w = new BrowserWindow({ show: false });

// Deprecated
console.log(w.webContents.getPrinters());
// Replace with
w.webContents.getPrintersAsync().then((printers) => {
console.log(printers);
});

已弃用:systemPreferences.{get,set}AppLevelAppearancesystemPreferences.appLevelAppearance

systemPreferences.getAppLevelAppearancesystemPreferences.setAppLevelAppearance 方法以及 systemPreferences.appLevelAppearance 属性已被弃用。请改用 nativeTheme 模块。

// Deprecated
systemPreferences.getAppLevelAppearance();
// Replace with
nativeTheme.shouldUseDarkColors;

// Deprecated
systemPreferences.appLevelAppearance;
// Replace with
nativeTheme.shouldUseDarkColors;

// Deprecated
systemPreferences.setAppLevelAppearance('dark');
// Replace with
nativeTheme.themeSource = 'dark';

已弃用:systemPreferences.getColoralternate-selected-control-text

systemPreferences.getColoralternate-selected-control-text 值已被弃用。请改用 selected-content-background

// Deprecated
systemPreferences.getColor('alternate-selected-control-text');
// Replace with
systemPreferences.getColor('selected-content-background');

新功能

  • 添加了 safeStorage.setUsePlainTextEncryptionsafeStorage.getSelectedStorageBackend api。 #39107
  • 添加了 safeStorage.setUsePlainTextEncryptionsafeStorage.getSelectedStorageBackend api。 #39155
  • 为通过 ipcRenderer.sendTo() 发送的消息添加了 senderIsMainFrame#39206
  • 增加了对将菜单标记为键盘启动的支持。 #38954

对 23.x.y 的支持结束

根据项目的 支持策略,Electron 23.x.y 已达到支持结束。 建议开发者和应用程序升级到较新版本的 Electron。

E26 (23 年 8 月)E27 (23 年 10 月)E28 (24 年 1 月)
26.x.y27.x.y28.x.y
25.x.y26.x.y27.x.y
24.x.y25.x.y26.x.y
22.x.y

下一步是什么

在短期内,您可以期待团队继续专注于跟上构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。

您可以在此处找到 Electron 的公共时间表

有关未来更改的更多信息,请访问 计划的重大变更 页面。

Electron 25.0.0

·5 分钟阅读

Electron 25.0.0 已发布!它包括 Chromium 114、V8 11.4 和 Node.js 18.15.0 的升级。阅读下文了解更多详情!


Electron 团队很高兴地宣布 Electron 25.0.0 的发布!您可以通过 npm 使用 npm install electron@latest 安装它,或者从我们的 发布网站 下载它。继续阅读以了解有关此版本的详细信息。

如果您有任何反馈,请在 Twitter 上与我们分享,或加入我们的社区 Discord!错误和功能请求可以在 Electron 的 issue tracker 中报告。

值得注意的变更

亮点

  • 在 Electron 的 net 模块中实现了 net.fetch,使用 Chromium 的网络堆栈。这与 Node 的 fetch() 不同,后者使用 Node.js 的 HTTP 堆栈。请参阅 #36733#36606
  • 添加了 protocol.handle,它取代并弃用了 protocol.{register,intercept}{String,Buffer,Stream,Http,File}Protocol#36674
  • 扩展了对 Electron 22 的支持,以匹配 Chromium 和 Microsoft 的 Windows 7/8/8.1 弃用计划。请参阅此博客文章末尾的更多详细信息。

堆栈变更

重大变更

已弃用:protocol.{register,intercept}{Buffer,String,Stream,File,Http}Protocol

protocol.register*Protocolprotocol.intercept*Protocol 方法已被 protocol.handle 取代。

新方法可以注册新协议或拦截现有协议,并且响应可以是任何类型。

// Deprecated in Electron 25
protocol.registerBufferProtocol('some-protocol', () => {
callback({ mimeType: 'text/html', data: Buffer.from('<h5>Response</h5>') });
});

// Replace with
protocol.handle('some-protocol', () => {
return new Response(
Buffer.from('<h5>Response</h5>'), // Could also be a string or ReadableStream.
{ headers: { 'content-type': 'text/html' } },
);
});
// Deprecated in Electron 25
protocol.registerHttpProtocol('some-protocol', () => {
callback({ url: 'https://electron.js.cn' });
});

// Replace with
protocol.handle('some-protocol', () => {
return net.fetch('https://electron.js.cn');
});
// Deprecated in Electron 25
protocol.registerFileProtocol('some-protocol', () => {
callback({ filePath: '/path/to/my/file' });
});

// Replace with
protocol.handle('some-protocol', () => {
return net.fetch('file:///path/to/my/file');
});

已弃用:BrowserWindow.setTrafficLightPosition(position)

BrowserWindow.setTrafficLightPosition(position) 已被弃用,应使用 BrowserWindow.setWindowButtonPosition(position) API,该 API 接受 null 而不是 { x: 0, y: 0 } 以将位置重置为系统默认值。

// Deprecated in Electron 25
win.setTrafficLightPosition({ x: 10, y: 10 });
win.setTrafficLightPosition({ x: 0, y: 0 });

// Replace with
win.setWindowButtonPosition({ x: 10, y: 10 });
win.setWindowButtonPosition(null);

已弃用:BrowserWindow.getTrafficLightPosition()

BrowserWindow.getTrafficLightPosition() 已被弃用,应使用 BrowserWindow.getWindowButtonPosition() API,当没有自定义位置时,该 API 返回 null 而不是 { x: 0, y: 0 }

// Deprecated in Electron 25
const pos = win.getTrafficLightPosition();
if (pos.x === 0 && pos.y === 0) {
// No custom position.
}

// Replace with
const ret = win.getWindowButtonPosition();
if (ret === null) {
// No custom position.
}

新功能

  • 添加了 net.fetch()#36733
    • net.fetch 支持对 file: URL 和使用 protocol.register*Protocol 注册的自定义协议的请求。 #36606
  • 添加了 BrowserWindow.set/getWindowButtonPosition API。 #37094
  • 添加了 protocol.handle,它取代并弃用了 protocol.{register,intercept}{String,Buffer,Stream,Http,File}Protocol#36674
  • webContents<webview> 标签添加了 will-frame-navigate 事件,每当帧层次结构中的任何帧尝试导航时都会触发该事件。 #34418
  • 向导航器事件添加了发起者信息。此信息允许区分 window.open 和父框架导致的导航,而不是子框架发起的导航。 #37085
  • 添加了 net.resolveHost,它使用 defaultSession 对象解析主机。 #38152
  • app 添加了新的 'did-resign-active' 事件。 #38018
  • webContents.print() 添加了几个标准页面尺寸选项。 #37159
  • 为会话处理程序 ses.setDisplayMediaRequestHandler() 回调添加了 enableLocalEcho 标志,以允许在 audioWebFrameMain 时在本地输出流中回显远程音频输入。 #37315
  • powerMonitor 添加了散热管理信息。 #38028
  • 允许将绝对路径传递给 session.fromPath() API。 #37604
  • webContents 上公开了 audio-state-changed 事件。 #37366

22.x.y 继续支持

告别 Windows 7/8/8.1 中所述,Electron 22(Chromium 108)计划的生命周期结束日期将从 2023 年 5 月 30 日延长至 2023 年 10 月 10 日。Electron 团队将继续将此计划中的任何安全修复程序向后移植到 Electron 22,直到 2023 年 10 月 10 日。10 月的支持日期遵循 Chromium 和 Microsoft 的扩展支持日期。10 月 11 日,Electron 团队将把支持降至最新的三个稳定主要版本,这些版本将不再支持 Windows 7/8/8.1。

E25 (23 年 5 月)E26 (23 年 8 月)E27 (23 年 10 月)
25.x.y26.x.y27.x.y
24.x.y25.x.y26.x.y
23.x.y24.x.y25.x.y
22.x.y22.x.y--

下一步是什么

在短期内,您可以期待团队继续专注于跟上构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。

您可以在此处找到 Electron 的公共时间表

有关未来更改的更多信息,请访问 计划的重大变更 页面。

Electron 24.0.0

·4 分钟阅读

Electron 24.0.0 已发布!它包括 Chromium 112.0.5615.49、V8 11.2 和 Node.js 18.14.0 的升级。阅读下文了解更多详情!


Electron 团队很高兴地宣布 Electron 24.0.0 的发布!您可以通过 npm 使用 npm install electron@latest 安装它,或者从我们的 发布网站 下载它。继续阅读以了解有关此版本的详细信息。

如果您有任何反馈,请在 Twitter 上与我们分享,或加入我们的社区 Discord!错误和功能请求可以在 Electron 的 issue tracker 中报告。

值得注意的变更

堆栈变更

重大变更

API 变更:nativeImage.createThumbnailFromPath(path, size)

maxSize 参数已更改为 size,以反映传入的大小将是创建的缩略图的大小。以前,如果图像小于 maxSize,Windows 不会放大图像,而 macOS 始终将大小设置为 maxSize。现在,跨平台的行为相同。

// a 128x128 image.
const imagePath = path.join('path', 'to', 'capybara.png');

// Scaling up a smaller image.
const upSize = { width: 256, height: 256 };
nativeImage.createThumbnailFromPath(imagePath, upSize).then((result) => {
console.log(result.getSize()); // { width: 256, height: 256 }
});

// Scaling down a larger image.
const downSize = { width: 64, height: 64 };
nativeImage.createThumbnailFromPath(imagePath, downSize).then((result) => {
console.log(result.getSize()); // { width: 64, height: 64 }
});

新功能

  • 添加了使用 cookies.get() 筛选 HttpOnly cookie 的功能。 #37365
  • shell.openExternal() 选项添加了 logUsage,允许将 SEE_MASK_FLAG_LOG_USAGE 标志传递给 Windows 上的 ShellExecuteExSEE_MASK_FLAG_LOG_USAGE 标志指示用户启动的启动,该启动启用对常用程序和其他行为的跟踪。 #37291
  • webRequest 过滤器添加了 types,从而增加了过滤您监听的请求的能力。#37427
  • webContents 添加了一个新的 devtools-open-url 事件,以允许开发者使用它们打开新窗口。 #36774
  • webContents.print() 添加了几个标准页面尺寸选项。 #37265
  • 为会话处理程序 ses.setDisplayMediaRequestHandler() 回调添加了 enableLocalEcho 标志,以允许在 audioWebFrameMain 时在本地输出流中回显远程音频输入。 #37528
  • 允许将应用程序特定的用户名传递给 inAppPurchase.purchaseProduct()#35902
  • 公开了 window.invalidateShadow() 以清除 macOS 上的残留视觉伪影。 #32452
  • 程序整体优化现在默认在 electron node headers 配置文件中启用,允许编译器使用来自程序中所有模块的信息(而不是每个模块(编译单元))执行优化。 #36937
  • SystemPreferences::CanPromptTouchID (macOS) 现在支持 Apple Watch。 #36935

对 21.x.y 的支持结束

根据项目的 支持策略,Electron 21.x.y 已达到支持结束。 建议开发者和应用程序升级到较新版本的 Electron。

告别 Windows 7/8/8.1 中所述,Electron 22(Chromium 108)计划的生命周期结束日期将从 2023 年 5 月 30 日延长至 2023 年 10 月 10 日。Electron 团队将继续将此计划中的任何安全修复程序向后移植到 Electron 22,直到 2023 年 10 月 10 日。

E24 (23 年 4 月)E25 (23 年 5 月)E26 (23 年 8 月)
24.x.y25.x.y26.x.y
23.x.y24.x.y25.x.y
22.x.y23.x.y24.x.y
--22.x.y22.x.y

下一步是什么

在短期内,您可以期待团队继续专注于跟上构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。

您可以在此处找到 Electron 的公共时间表

有关未来更改的更多信息,请访问 计划的重大变更 页面。

Electron 10 周年 🎉

·10 分钟阅读

首次提交到 electron/electron 仓库是在 2013 年 3 月 13 日1

Initial commit on electron/electron by @aroben

10 年过去了,在 1192 位独特贡献者提交了 27,147 次提交后,Electron 已成为当今构建桌面应用程序最流行的框架之一。这个里程碑是庆祝和反思我们迄今为止的旅程,并分享我们一路走来所学到的知识的绝佳机会。

如果没有每一位投入时间和精力为项目做出贡献的人,我们今天就不会在这里。虽然源代码提交始终是最可见的贡献,但我们也必须承认那些报告错误、维护 userland 模块、提供文档和翻译以及参与网络空间中 Electron 社区的人们的努力。每一项贡献对我们维护者来说都是非常宝贵的。

在我们继续阅读博客文章的其余部分之前:谢谢您。❤️

我们是如何走到这一步的?

Atom Shell 是作为 GitHub 的 Atom 编辑器 的骨干构建的,该编辑器于 2014 年 4 月发布公开测试版。它从头开始构建,作为当时可用的基于 Web 的桌面框架(node-webkit 和 Chromium Embedded Framework)的替代方案。它有一个杀手级功能:嵌入 Node.js 和 Chromium,为 Web 技术提供强大的桌面运行时。

在一年之内,Atom Shell 开始在功能和受欢迎程度方面实现巨大增长。大型公司、初创公司和个人开发者都开始使用它构建应用程序(一些早期采用者包括 SlackGitKrakenWebTorrent),并且该项目被恰当地重命名为 Electron

从那时起,Electron 一路高歌猛进,从未停止。以下是我们每周下载量的随时间变化的图表,由 npmtrends.com 提供

Electron weekly downloads graph over time

Electron v1 于 2016 年发布,承诺提高 API 稳定性和更好的文档和工具。Electron v2 于 2018 年发布,并引入了语义版本控制,使 Electron 开发者更容易跟踪发布周期。

到 Electron v6,我们转变为定期的 12 周主要版本发布节奏,以匹配 Chromium 的节奏。这项决定是该项目心态的转变,将“拥有最新的 Chromium 版本”从锦上添花变为优先事项。这减少了升级之间的技术债务量,使我们更容易保持 Electron 的更新和安全。

从那时起,我们一直是一台运转良好的机器,在每个 Chromium 稳定版发布的同一天发布新的 Electron 版本。当 Chromium 在 2021 年将其发布计划加速到 4 周时,我们能够耸耸肩,并将我们的发布节奏相应地提高到 8 周。

我们现在使用的是 Electron v23(并且还在计数),并且仍然致力于构建用于构建跨平台桌面应用程序的最佳运行时。即使近年来 JavaScript 开发者工具蓬勃发展,Electron 仍然是桌面应用程序框架领域中稳定、经过实战考验的支柱。Electron 应用程序如今无处不在:您可以使用 Visual Studio Code 进行编程,使用 Figma 进行设计,使用 Slack 进行交流,并使用 Notion 记笔记(以及许多其他用例)。我们为这一成就感到无比自豪,并感谢每一位使其成为可能的人。

我们一路走来学到了什么?

通往十年里程碑的道路漫长而曲折。以下是一些关键的事情,这些事情帮助我们运营一个可持续的大型开源项目。

通过治理模型扩展分布式决策制定

我们必须克服的一个挑战是,一旦 Electron 首次爆红,如何处理项目的长期方向。我们如何处理成为一个由数十名工程师组成的团队,他们分布在不同的公司、国家和时区?

在早期,Electron 的维护者小组依靠非正式的协调,这对于较小的项目来说是快速而轻便的,但不适用于更广泛的协作。2019 年,我们转变为治理模型,不同的工作组有正式的责任领域。这对于简化流程并将项目所有权的某些部分分配给特定的维护者至关重要。如今,每个工作组 (WG) 负责什么?

  • 将 Electron 版本发布出去(发布 WG)
  • 升级 Chromium 和 Node.js(升级 WG)
  • 监督公共 API 设计(API WG)
  • 保持 Electron 安全(安全 WG)
  • 运行网站、文档和工具(生态系统 WG)
  • 社区和企业外展(外展 WG)
  • 社区审核(社区与安全 WG)
  • 维护我们的构建基础设施、维护者工具和云服务(基础设施 WG)

在转向治理模型的同时,我们也 将 Electron 的所有权从 GitHub 转移到 OpenJS 基金会。虽然最初的核心团队今天仍在 Microsoft 工作,但他们只是构成 Electron 治理的更大合作者群体的一部分。2

虽然此模型并不完美,但它在全球疫情和持续的宏观经济逆风中非常适合我们。展望未来,我们计划修订治理章程,以指导我们度过 Electron 的第二个十年。

信息

如果您想了解更多信息,请查看 electron/governance 仓库!

社区

开源的社区部分很难,特别是当您的外展团队是一群穿着风衣并写着“社区经理”的工程师时。也就是说,作为一个大型开源项目意味着我们有很多用户,并且利用他们的能量为 Electron 构建 userland 生态系统是维持项目健康的关键部分。

我们一直在做什么来发展我们的社区影响力?

构建虚拟社区

  • 2020 年,我们启动了我们的社区 Discord 服务器。我们之前在 Atom 的论坛中有一个版块,但决定拥有一个更非正式的消息传递平台,以便在维护者和 Electron 开发者之间进行讨论,并获得一般的调试帮助。
  • 2021 年,在 @BlackHole1 的帮助下,我们建立了 Electron China 用户组。该小组在 Electron 在中国蓬勃发展的科技界用户中的增长中发挥了重要作用,为他们提供了一个合作交流想法和在我们的英语空间之外讨论 Electron 的空间。我们还要感谢 cnpm 在其 npm 中文镜像中支持 Electron 的 nightly 版本的努力。

参与高知名度的开源项目

  • 自 2019 年以来,我们每年都在庆祝 Hacktoberfest。Hacktoberfest 是 DigitalOcean 每年组织的开源庆祝活动,每年我们都会收到数十位热情的贡献者,他们希望在开源软件上留下自己的印记。
  • 2020 年,我们参与了 Google Season of Docs 的初始迭代,我们与 @bandantonio 合作,重新设计了 Electron 的新用户教程流程。
  • 2022 年,我们首次指导了 Google 编程之夏学生。 @aryanshridhar 做了一些很棒的工作,重构了 Electron Fiddle 的核心版本加载逻辑,并将其打包程序迁移到 webpack

自动化一切!

今天,Electron 治理机构约有 30 名活跃的维护者。我们中只有不到一半的人是全职贡献者,这意味着还有很多工作要做。我们保持一切顺利运行的诀窍是什么?我们的座右铭是计算机很便宜,而人类时间很昂贵。以典型的工程师方式,我们开发了一套自动化支持工具,让我们的生活更轻松。

Not Goma

核心 Electron 代码库是一个庞大的 C++ 代码库,构建时间一直是限制我们发布错误修复和新功能速度的因素。2020 年,我们部署了 Not Goma,这是 Google 的 Goma 分布式编译器服务的自定义 Electron 特定后端。Not Goma 处理来自授权用户机器的编译请求,并将该过程分布在后端数百个核心中。它还缓存编译结果,以便其他人编译相同的文件时只需要下载预编译结果。

自推出 Not Goma 以来,维护者的编译时间已从数小时缩短到数分钟。稳定的互联网连接成为贡献者编译 Electron 的最低要求!

信息

如果您是开源贡献者,您也可以尝试 Not Goma 的只读缓存,该缓存默认情况下可通过 Electron Build Tools 获得。

持续因子身份验证

持续因子身份验证 (CFA) 是围绕 npm 的双因素身份验证 (2FA) 系统构建的自动化层,我们将其与 semantic-release 结合使用,以管理我们各种 @electron/ npm 包的安全和自动化发布。

虽然 semantic-release 已经自动化了 npm 包的发布流程,但它需要关闭双因素身份验证,或者传入一个绕过此限制的密钥令牌。

我们构建 CFA 是为了向任意 CI 作业交付 npm 2FA 的基于时间的一次性密码 (TOTP),从而使我们能够利用 semantic-release 的自动化,同时保持双因素身份验证的额外安全性。

我们将 CFA 与 Slack 集成前端一起使用,维护人员可以使用他们安装了 Slack 的任何设备验证软件包发布,只要他们手头有 TOTP 生成器即可。

信息

如果您想在自己的项目中试用 CFA,请查看 GitHub 仓库文档!如果您使用 CircleCI 作为您的 CI 提供商,我们还提供 一个方便的 orb,以快速搭建带有 CFA 的项目。

Sheriff

Sheriff 是我们编写的一个开源工具,用于自动化管理 GitHub、Slack 和 Google Workspace 中的权限。

Sheriff 的核心价值主张是权限管理应该是一个透明的过程。它使用一个 YAML 配置文件,指定跨越上述所有服务的权限。借助 Sheriff,获得仓库的协作者身份或创建新的邮件列表就像获得 PR 批准和合并一样容易。

Sheriff 还具有一个审计日志,可以发布到 Slack,在 Electron 组织中任何地方发生可疑活动时向管理员发出警告。

……以及我们所有的 GitHub 机器人

GitHub 是一个具有丰富 API 可扩展性的平台,以及一个名为 Probot 的第一方机器人应用程序框架。为了帮助我们专注于工作中更具创造性的部分,我们构建了一套较小的机器人,以帮助我们完成繁琐的工作。以下是一些示例:

  • Sudowoodo 自动化了 Electron 的发布流程,从启动构建到将发布资产上传到 GitHub 和 npm,实现了端到端的自动化。
  • Trop 通过尝试基于 GitHub PR 标签将补丁 cherry-pick 到之前的发布分支,从而自动化 Electron 的反向移植过程。
  • Roller 自动化了 Electron 的 Chromium 和 Node.js 依赖项的滚动升级。
  • Cation 是我们 electron/electron PR 的状态检查机器人。

总而言之,我们这个小小的机器人家族极大地提高了开发人员的生产力!

下一步是什么?

当我们作为项目进入第二个十年时,您可能会问:Electron 的下一步是什么?

我们将与 Chromium 的发布节奏保持同步,每 8 周发布 Electron 的新主要版本,使框架与 Web 平台和 Node.js 的最新和最棒的技术保持同步,同时为企业级应用程序保持稳定性和安全性。

我们通常会在即将开展的计划变得具体时宣布相关新闻。如果您想了解未来的版本、功能和常规项目更新,您可以阅读我们的博客并关注我们的社交媒体个人资料(TwitterMastodon)!

脚注

  1. 这实际上是来自 electron-archive/brightray 项目的第一个提交,该项目于 2017 年被 Electron 吸收并合并了其 git 历史记录。但谁会在乎呢?今天是我们的生日,所以规则由我们来定!

  2. 与普遍看法相反,Electron 不再归 GitHub 或 Microsoft 所有,现在是 OpenJS Foundation 的一部分。

Electron 23.0.0

·3 分钟阅读

Electron 23.0.0 已发布!它包括升级到 Chromium 110、V8 11.0 和 Node.js 18.12.1。此外,已停止支持 Windows 7/8/8.1。阅读下文以了解更多详情!


Electron 团队很高兴地宣布 Electron 23.0.0 的发布!您可以通过 npm 使用 npm install electron@latest 安装它,或从我们的 发布网站 下载它。继续阅读以了解有关此版本的详细信息。

如果您有任何反馈,请在 Twitter 上与我们分享,或加入我们的社区 Discord!错误和功能请求可以在 Electron 的 issue tracker 中报告。

值得注意的变更

堆栈变更

新功能

  • Display 对象添加了 label 属性。#36933
  • 添加了 app.getPreferredSystemLanguages() API 以返回用户的系统语言。#36035
  • 添加了对 WebUSB API 的支持。#36289
  • 添加了对 SerialPort.forget() 的支持,以及在给定来源被撤销时在 Session 对象上发出的新事件 serial-port-revoked#35310
  • 添加了新的 win.setHiddenInMissionControl API,允许开发人员选择退出 macOS 上的 Mission Control。#36092

停止支持 Windows 7/8/8.1

Electron 23 不再支持 Windows 7/8/8.1。Electron 遵循计划的 Chromium 弃用策略,该策略将 弃用 Chromium 109 中的 Windows 7/8/8.1 以及 Windows Server 2012 和 2012 R2 支持(在此处阅读更多信息)

破坏性 API 更改

以下是 Electron 23 中引入的破坏性更改。您可以在 计划的破坏性更改页面上阅读有关这些更改和未来更改的更多信息。

已移除:BrowserWindow scroll-touch-* 事件

已弃用的 BrowserWindow 上的 scroll-touch-beginscroll-touch-endscroll-touch-edge 事件已被移除。请改用 WebContents 上新提供的 input-event 事件。

// Removed in Electron 23.0
-win.on('scroll-touch-begin', scrollTouchBegin)
-win.on('scroll-touch-edge', scrollTouchEdge)
-win.on('scroll-touch-end', scrollTouchEnd)

// Replace with
+win.webContents.on('input-event', (_, event) => {
+ if (event.type === 'gestureScrollBegin') {
+ scrollTouchBegin()
+ } else if (event.type === 'gestureScrollUpdate') +{
+ scrollTouchEdge()
+ } else if (event.type === 'gestureScrollEnd') {
+ scrollTouchEnd()
+ }
+})

停止支持 20.x.y

根据项目的 支持策略,Electron 20.x.y 已达到停止支持状态。鼓励开发人员和应用程序升级到较新版本的 Electron。

E22 (22 年 11 月)E23 (23 年 2 月)E24 (23 年 4 月)E25 (23 年 5 月)E26 (23 年 8 月)
22.x.y23.x.y24.x.y25.x.y26.x.y
21.x.y22.x.y23.x.y24.x.y25.x.y
20.x.y21.x.y22.x.y23.x.y24.x.y

下一步是什么

在短期内,您可以期待团队继续专注于跟上构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。

您可以在此处找到 Electron 的公共时间表

有关未来更改的更多信息,请访问 计划的重大变更 页面。

Electron 22.0.0

·5 分钟阅读

Electron 22.0.0 已发布!它包括一个新的实用程序进程 API、Windows 7/8/8.1 支持更新以及升级到 Chromium 108、V8 10.8 和 Node.js 16.17.1。阅读下文以了解更多详情!


Electron 团队很高兴地宣布 Electron 22.0.0 的发布!您可以通过 npm 使用 npm install electron@latest 安装它,或从我们的 发布网站 下载它。继续阅读以了解有关此版本的详细信息。

如果您有任何反馈,请在 Twitter 上与我们分享,或加入我们的社区 Discord!错误和功能请求可以在 Electron 的 issue tracker 中报告。

值得注意的变更

堆栈变更

突出显示的功能

UtilityProcess API #36089

新的 UtilityProcess 主进程模块允许创建轻量级的 Chromium 子进程,该子进程仅具有 Node.js 集成,同时还允许使用 MessageChannel 与沙盒渲染器进行通信。该 API 基于 Node.js child_process.fork 设计,以便于过渡,主要区别在于入口点 modulePath 必须来自打包的应用程序内部,以仅允许加载受信任的脚本。此外,该模块默认情况下阻止与渲染器建立通信通道,从而维护主进程是应用程序中唯一受信任进程的约定。

您可以在我们的文档中阅读有关 新 UtilityProcess API 的更多信息

Windows 7/8/8.1 支持更新

信息

2023/02/16:关于 Windows Server 2012 支持的更新

上个月,Google 宣布 Chrome 109 将继续接收针对 Windows Server 2012 和 Windows Server 2012 R2 的关键安全修复,直到 2023 年 10 月 10 日。因此,Electron 22(Chromium 108)计划的生命周期结束日期将从 2023 年 5 月 30 日延长至 2023 年 10 月 10 日。Electron 团队将继续将此计划中的任何安全修复反向移植到 Electron 22,直到 2023 年 10 月 10 日。

请注意,我们不会为 Windows 7/8/8.1 进行额外的安全修复。此外,如先前宣布的那样,Electron 23(Chromium 110)将仅在 Windows 10 及更高版本上运行。

Electron 22 将是最后一个支持 Windows 7/8/8.1 的 Electron 主要版本。Electron 遵循计划的 Chromium 弃用策略,该策略将 弃用 Chromium 109 中的 Windows 7/8/8.1 支持(在此处阅读更多信息)

Electron 23 及更高版本将不支持 Windows 7/8/8.1。

其他突出显示的更改

  • 在 Linux 和 Windows 上添加了对 Web Bluetooth pin 配对的支持。#35416
  • 添加了 LoadBrowserProcessSpecificV8Snapshot 作为新的 fuse,它将允许主/浏览器进程从 browser_v8_context_snapshot.bin 文件加载其 v8 快照。任何其他进程都将使用与今天相同的路径。#35266
  • 添加了 WebContents.opener 以访问窗口打开器,以及 webContents.fromFrame(frame) 以获取与 WebFrameMain 实例对应的 WebContents。#35140
  • 通过新的会话处理程序 ses.setDisplayMediaRequestHandler 添加了对 navigator.mediaDevices.getDisplayMedia 的支持。#30702

破坏性 API 更改

以下是 Electron 22 中引入的破坏性更改。您可以在 计划的破坏性更改页面上阅读有关这些更改和未来更改的更多信息。

已弃用:webContents.incrementCapturerCount(stayHidden, stayAwake)

webContents.incrementCapturerCount(stayHidden, stayAwake) 已被弃用。现在在页面捕获完成时由 webContents.capturePage 自动处理。

const w = new BrowserWindow({ show: false })

- w.webContents.incrementCapturerCount()
- w.capturePage().then(image => {
- console.log(image.toDataURL())
- w.webContents.decrementCapturerCount()
- })

+ w.capturePage().then(image => {
+ console.log(image.toDataURL())
+ })

已弃用:webContents.decrementCapturerCount(stayHidden, stayAwake)

webContents.decrementCapturerCount(stayHidden, stayAwake) 已被弃用。现在在页面捕获完成时由 webContents.capturePage 自动处理。

const w = new BrowserWindow({ show: false })

- w.webContents.incrementCapturerCount()
- w.capturePage().then(image => {
- console.log(image.toDataURL())
- w.webContents.decrementCapturerCount()
- })

+ w.capturePage().then(image => {
+ console.log(image.toDataURL())
+ })

已移除:WebContents new-window 事件

WebContents 的 new-window 事件已被移除。它已被 webContents.setWindowOpenHandler() 取代。

- webContents.on('new-window', (event) => {
- event.preventDefault()
- })

+ webContents.setWindowOpenHandler((details) => {
+ return { action: 'deny' }
+ })

已弃用:BrowserWindow scroll-touch-* 事件

BrowserWindow 上的 scroll-touch-beginscroll-touch-endscroll-touch-edge 事件已被弃用。请改用 WebContents 上新提供的 input-event 事件

// Deprecated
- win.on('scroll-touch-begin', scrollTouchBegin)
- win.on('scroll-touch-edge', scrollTouchEdge)
- win.on('scroll-touch-end', scrollTouchEnd)

// Replace with
+ win.webContents.on('input-event', (_, event) => {
+ if (event.type === 'gestureScrollBegin') {
+ scrollTouchBegin()
+ } else if (event.type === 'gestureScrollUpdate') {
+ scrollTouchEdge()
+ } else if (event.type === 'gestureScrollEnd') {
+ scrollTouchEnd()
+ }
+ })

停止支持 19.x.y

根据项目的 支持策略,Electron 19.x.y 已达到停止支持状态。鼓励开发人员和应用程序升级到较新版本的 Electron。

E19 (22 年 5 月)E20 (22 年 8 月)E21 (22 年 9 月)E22 (22 年 11 月)E23 (23 年 1 月)
19.x.y20.x.y21.x.y22.x.y23.x.y
18.x.y19.x.y20.x.y21.x.y22.x.y
17.x.y18.x.y19.x.y20.x.y21.x.y

下一步是什么

Electron 项目将在 2022 年 12 月暂停一个月,并在 2023 年 1 月恢复。更多信息请参见 12 月关闭博客文章

在短期内,您可以期待团队继续专注于跟上构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。

您可以在此处找到 Electron 的公共时间表

有关未来更改的更多信息,请访问 计划的重大变更 页面。

告别 Windows 7/8/8.1

·3 分钟阅读

Electron 将从 Electron 23 开始停止支持 Windows 7、Windows 8 和 Windows 8.1。


根据 Chromium 的弃用策略,Electron 将从 Electron 23 开始停止支持 Windows 7、Windows 8 和 Windows 8.1。这与 Microsoft 停止支持 Windows 7 ESUWindows 8.1 扩展支持(于 2023 年 1 月 10 日结束)相一致。

Electron 22 将是最后一个支持 Windows 10 之前版本的 Electron 主要版本。Electron 23 及更高版本将不支持 Windows 7/8/8.1。旧版本的 Electron 将继续在 Windows 7 上运行,我们将继续为 Electron 22.x 系列发布补丁,直到 2023 年 5 月 30 日,届时 Electron 将停止支持 22.x(根据我们的 支持时间表)。

为什么要弃用?

Electron 遵循计划的 Chromium 弃用策略,该策略将在 Chromium 109 中弃用支持(在此处阅读有关 Chromium 时间表的更多信息)。Electron 23 将包含 Chromium 110,它将不支持旧版本的 Windows。

因此,包含 Chromium 108 的 Electron 22 将是最后一个受支持的版本。

弃用时间表

以下是我们计划的弃用时间表

  • 2022 年 12 月:Electron 团队进入假期静默期
  • 2023 年 1 月:所有受支持的发布分支都接受与 Windows 7 和 8 相关的问题。
  • 2023 年 2 月 7 日:Electron 23 发布。
  • 2023 年 2 月 8 日 - 2023 年 5 月 29 日:Electron 将继续接受 Electron 23 之前受支持版本的修复。
  • 2023 年 5 月 30 日:Electron 22 达到其支持周期的终点。

这对开发人员意味着什么

  • Electron 团队将接受与 Windows 7/8/8.1 相关的稳定支持版本的问题和修复,直到每个版本达到其支持周期的终点。
    • 这特别适用于 Electron 22、Electron 21 和 Electron 20。
  • 对于 Electron 23 之前的版本,将接受与 Windows 7/8/8.1 相关的新问题。
    • 对于任何较新的发布版本,将不接受新问题。
  • 一旦 Electron 22 达到其支持周期的终点,所有与 Windows 7/8/8.1 相关的现有问题都将关闭。
信息

2023/02/16:关于 Windows Server 2012 支持的更新

上个月,Google 宣布 Chrome 109 将继续接收针对 Windows Server 2012 和 Windows Server 2012 R2 的关键安全修复,直到 2023 年 10 月 10 日。因此,Electron 22(Chromium 108)计划的生命周期结束日期将从 2023 年 5 月 30 日延长至 2023 年 10 月 10 日。Electron 团队将继续将此计划中的任何安全修复反向移植到 Electron 22,直到 2023 年 10 月 10 日。

请注意,我们不会为 Windows 7/8/8.1 进行额外的安全修复。此外,如先前宣布的那样,Electron 23(Chromium 110)将仅在 Windows 10 及更高版本上运行。

下一步是什么

如果您有任何问题或疑虑,请随时通过 info@electronjs.org 给我们写信。您还可以在我们的官方 Electron Discord 中找到社区支持。

寂静之地 II (22 年 12 月)

·一分钟阅读

Electron 项目将在 2022 年 12 月暂停一个月,然后在 2023 年 1 月恢复全速运转。

via GIPHY


12 月份保持不变的内容

  1. 零日漏洞和其他主要安全相关的版本将根据需要发布。安全事件应通过 SECURITY.md 报告。
  2. 行为准则 报告和审核将继续进行。

12 月份的不同之处

  1. 12 月份没有新的稳定版本发布。12 月最后两周没有 Nightly 和 Alpha 版本。
  2. 除少数例外,不进行拉取请求审查或合并。
  3. 任何仓库上都没有问题跟踪器更新。
  4. 维护人员不提供 Discord 调试帮助。
  5. 没有社交媒体内容更新。

为什么会这样?

鉴于 2021 年 12 月静默月的成功,我们希望在 2022 年再次推出。12 月仍然是大多数公司的淡季,因此我们希望让我们的维护人员有机会充电。每个人都期待着 2023 年,我们期望好事会发生!我们鼓励其他项目考虑类似的措施。

Electron Forge 6 介绍

·6 分钟阅读

我们很高兴地宣布 Electron Forge v6.0.0 现已发布!此版本标志着 Forge 自 2018 年以来的首次主要版本发布,并将该项目从 electron-userland 转移到 Github 上的主 electron 组织。

继续阅读以了解新功能以及您的应用程序如何采用 Electron Forge!

什么是 Electron Forge?

Electron Forge 是一个用于打包和分发 Electron 应用程序的工具。它将 Electron 的构建工具生态系统统一到一个可扩展的界面中,以便任何人都可以直接开始制作 Electron 应用程序。

突出显示的功能包括:

  • 📦 应用程序打包和代码签名
  • 🚚 Windows、macOS 和 Linux 上的可自定义安装程序(DMG、deb、MSI、PKG、AppX 等)
  • ☁️ 云提供商(GitHub、S3、Bitbucket 等)的自动化发布流程
  • ⚡️ 易于使用的 webpack 和 TypeScript 样板模板
  • ⚙️ Native Node.js 模块支持
  • 🔌 可扩展的 JavaScript 插件 API
延伸阅读

访问 为什么选择 Electron Forge 说明文档,以了解有关 Forge 的理念和架构的更多信息。

v6 中的新功能?

完全重写

从 v1 到 v5,Electron Forge 基于现已停止维护的 electron-compile 项目。Forge 6 是该项目的完全重写,具有新的模块化架构,可以扩展以满足任何 Electron 应用程序的需求。

在过去的几年中,Forge v6.0.0-beta 已实现与 v5 的功能对等,并且代码变动已大大放缓,使该工具可以普遍采用。

不要安装错误的包

对于版本 5 及更低版本,Electron Forge 发布到 npm 上的 electron-forge 包。从 v6 重写开始,Forge 的结构变为一个包含许多较小项目的 monorepo 项目。

官方支持

从历史上看,Electron 维护人员对构建工具一直没有明确的意见,将这项任务留给了各种社区包。但是,随着 Electron 作为一个项目的成熟,新的 Electron 开发人员越来越难以理解他们需要哪些工具来构建和分发他们的应用程序。

为了帮助指导 Electron 开发人员完成分发过程,我们已决定使 Forge 成为 Electron 的官方“开箱即用”的构建管道

在过去的一年中,我们一直在缓慢地将 Forge 集成到官方 Electron 文档中,并且最近我们将 Forge 从其旧家 electron-userland/electron-forge 转移到了 electron/forge 仓库。现在,我们终于准备好向广大用户发布 Electron Forge!

开始使用

初始化新的 Forge 项目

可以使用 create-electron-app CLI 脚本来搭建新的 Electron Forge 项目。

yarn create electron-app my-app --template=webpack
cd my-app
yarn start

该脚本将在 my-app 文件夹中创建一个 Electron 项目,其中包含完整的 JavaScript 打包和预配置的构建管道。

有关更多信息,请参阅 Forge 文档中的 入门指南

一流的 webpack 支持

上面的代码片段使用了 Forge 的 Webpack 模板,我们推荐将其作为新 Electron 项目的起点。此模板围绕 @electron-forge/plugin-webpack 插件构建,该插件以多种方式将 webpack 与 Electron Forge 集成,包括:

  • 使用 webpack-dev-server 增强本地开发流程,包括在渲染器中支持 HMR;
  • 处理应用程序打包之前的 webpack 打包构建逻辑;以及
  • 在 webpack 打包过程中添加对 Native Node 模块的支持。

如果您需要 TypeScript 支持,请考虑改用 Webpack + TypeScript 模板

导入现有项目

Electron Forge CLI 还包含用于现有 Electron 项目的导入命令。

cd my-app
yarn add --dev @electron-forge/cli
yarn electron-forge import

当您使用 import 命令时,Electron Forge 将添加一些核心依赖项并创建一个新的 forge.config.js 配置。如果您有任何现有的构建工具(例如 Electron Packager、Electron Builder 或 Forge 5),它将尝试迁移尽可能多的设置。您的一些现有配置可能需要手动迁移。

手动迁移的详细信息可以在 Forge 导入文档中找到。如果您需要帮助,请访问我们的 Discord 服务器

为什么要切换到 Forge?

如果您已经拥有用于打包和发布 Electron 应用程序的工具,那么采用 Electron Forge 带来的好处仍然可能超过最初的切换成本。

我们认为使用 Forge 主要有两个好处

  1. Forge 会在 Electron 支持新功能后立即接收这些功能用于应用程序构建。在这种情况下,您无需自行连接新的工具支持,也无需等待其他软件包最终实现该支持才能升级。有关最近的示例,请参阅 macOS 通用二进制文件ASAR 完整性检查

  2. Forge 的多包架构使其易于理解和扩展。 由于 Forge 由许多职责明确的小型软件包组成,因此更容易跟踪代码流程。此外,Forge 的可扩展 API 设计意味着您可以编写自己的附加构建逻辑,独立于为高级用例提供的配置选项。有关编写自定义 Forge 插件、构建器和发布者的更多详细信息,请参阅文档的 扩展 Electron Forge 部分。

重大更改

Forge 6 经历了漫长的 beta 阶段,其发布节奏逐渐放缓。但是,我们在 2022 年下半年加快了开发速度,并在 v6.0.0 稳定版本发布之前,利用最近的几个版本推送了一些最终的重大更改。

如果您是 Electron Forge 6 beta 用户,请参阅 v6.0.0 GitHub 发布说明,了解最近的 beta 版本 (>=6.0.0-beta.65) 中所做的重大更改列表。

完整的更改和提交列表可以在仓库的 CHANGELOG.md 中找到。

提交您的反馈!

告诉我们您需要什么!Electron Forge 团队一直在努力构建更好的项目,以更好地满足用户的需求。

您可以通过提交功能请求、发布 问题 或只是告诉我们您的反馈来帮助我们改进 Electron Forge!您也可以加入我们的 官方 Electron Discord 服务器,那里有专门的 Electron Forge 讨论频道。

如果您想对 https://forge.electron.js.cn 上的 Forge 文档提供任何反馈,我们有一个 GitBook 实例,它同步到 electron-forge/electron-forge-docs 仓库。

2022 年维护者峰会回顾

·5 分钟阅读

上个月,Electron 的维护者小组在加拿大温哥华会面,讨论 2023 年及以后项目的方向。在会议室的四天里,核心维护者和受邀的合作者讨论了新的倡议、维护痛点和总体项目健康状况。

合影!由 @groundwater 拍摄。

展望未来,团队仍将全力以赴发布定期和快速的 Chromium 升级、修复错误,并使 Electron 对每个人来说更安全、性能更高。我们还有一些令人兴奋的项目正在进行中,我们很乐意与社区分享!

变革性的新 API

Electron 项目中需要达成共识的主要 API 提案将通过征求意见 (RFC) 流程,该流程由我们的 API 工作组成员审查。

今年,我们推动了两项主要提案,这些提案有可能为 Electron 应用程序解锁新的功能维度。这些提案具有高度实验性,但这里可以先睹为快!

新的原生插件增强功能 (C API)

该提案概述了一个新的 Electron C API 层,该层将允许应用程序开发人员编写自己的原生 Node 插件,这些插件可以与 Electron 的内部资源接口,类似于 Node 自己的 Node-API。有关拟议的新 API 的更多信息,可以在这里找到

示例:使用 Chromium 资源增强应用程序功能

许多 Electron 应用程序维护着自己的分支,以便直接与 Chromium 内部组件进行交互,否则这些组件在使用 vanilla(未修改)Electron 时是无法访问的。通过在 C API 层中公开这些资源,此代码可以作为原生模块与 Electron 一起存在,从而可能减轻应用程序开发人员的维护负担。

公开 Chromium 的 UI 层 (Views API)

在底层,Chrome 用户界面 (UI) 的非网站部分(例如工具栏、选项卡或按钮)是使用名为 Views 的框架构建的。Views API 提案将此框架的部分内容作为 Electron 中的 JavaScript 类引入,最终目标是允许开发人员为其 Electron 应用程序创建非 Web UI 元素。这将防止应用程序不得不拼凑 Web 内容。

使这组新 API 成为可能的基础工作目前正在进行中。以下是您在不久的将来可以期待的一些首批内容。

示例:使用 WebContentsView 重构窗口模型

我们计划的第一个更改是将 Chrome 的 WebContentsView 公开到 Electron 的 API 表面,这将取代我们现有的 BrowserView API(尽管名称如此,但它是特定于 Electron 的代码,与 Chromium Views 无关)。随着 WebContentsView 的公开,我们将拥有一个可重用的 View 对象,它可以显示 Web 内容,从而为使 BrowserWindow 类成为纯 JavaScript 并消除更多代码复杂性打开大门。

尽管此更改没有为应用程序开发人员提供许多新功能,但它是一个大型重构,消除了底层的大量代码,简化了 Chromium 升级,并降低了主要版本之间出现新错误的风险。

如果您是在应用程序中使用 BrowserViews 的 Electron 开发人员:请不要担心,我们没有忘记您!我们计划将现有的 BrowserView 类作为 WebContentsView 的 shim,以便在您过渡到较新的 API 时提供缓冲。

参见:electron/electron#35658

示例:使用 ScrollView 的可滚动 Web 内容

我们在 Stack 的朋友一直在推动一项倡议,将 Chromium ScrollView 组件公开到 Electron 的 API。借助这个新的 API,任何子 View 组件都可以水平或垂直滚动。

尽管这个新 API 仅实现了一个较小的功能,但团队的最终目标是构建一组实用程序 View 组件,这些组件可以用作构建更复杂的非 HTML 界面的工具包。

参与其中

您是 Electron 应用程序开发人员,对这两项 API 提案中的任何一项感兴趣吗?尽管我们尚未准备好接收其他 RFC,但请继续关注未来更多详细信息!

Electron Forge v6 稳定版本发布

自从框架诞生以来,Electron 的构建工具生态系统在很大程度上是社区驱动的,并且由许多小型单用途软件包组成(例如 electron-winstaller、electron-packager、electron-notarize、electron-osx-sign)。尽管这些工具运行良好,但用户将一个可用的构建管道拼凑在一起是很困难的。

为了帮助为 Electron 开发人员构建更友好的体验,我们构建了 Electron Forge,这是一个将所有现有工具组合到单个界面中的一体化解决方案。尽管 Forge 自 2017 年以来一直在开发中,但该项目在过去几年中一直处于休眠状态。但是,鉴于社区对 Electron 中构建工具状态的反馈,我们一直在努力发布下一代 Forge 稳定主要版本。

Electron Forge 6 附带一流的 TypeScript 和 Webpack 支持,以及一个可扩展的 API,允许开发人员创建自己的插件和安装程序。

敬请期待:公告即将发布

如果您有兴趣使用 Forge 构建项目,或者使用 Forge 的可扩展第三方 API 构建模板或插件,请敬请期待我们本月晚些时候发布的 Forge v6 稳定版本的官方公告!

下一步是什么?

除了以上内容,团队一直在考虑一系列探索性项目,以使 Electron 体验对应用程序开发人员和最终用户来说更好。更新程序工具、API 审查流程和增强的文档是我们正在试验的其他事情。我们希望在不久的将来分享更多消息!