跳转到主内容

· 阅读时间:约 3 分钟

Electron 26.0.0 已发布! 此次升级中包含 Chromium 116.0.5845.62,V8 11.2,和 Node.js 18.16.1 。 请阅读下文了解更多详情!


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

如果您有任何反馈,请在Twitter上与我们分享,或加入我们的社区 Discord! Bug 和功能请求可以在 Electron 的 问题跟踪器 中报告。

重要变化

架构(Stack)更新

重大更改

弃用:webContents.getPrinters

webContents.getPrinters 方法已经被废除。 使用webContents.getPrintersAsync代替。

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

// 被弃用
console.log(w.webContents.getPrinters());
// 使用它来代替
w.webContents.getPrintersAsync().then((printers) => {
console.log(printers);
});

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

方法systemPreferences.getAppLevelAppearancesystemPreferences.setAppLevelAppearance 已被弃用,也包括属性 systemPreferences.appLevelAppearance。 请改用模块 nativeTheme

// 被弃用
systemPreferences.getAppLevelAppearance();
// 替换为
nativeTheme.shouldUseDarkColors;

// 被弃用
systemPreferences.appLevelAppearance;
// 替换为
nativeTheme.shouldUseDarkColors;

// 被弃用
systemPreferences.setAppLevelAppearance('dark');
// 替换为
nativeTheme.themeSource = 'dark';

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

systemPreferences.getColoralternate-selected-control-text 值已被弃用。 替换为 selected-content-background

// 被弃用
systemPreferences.getColor('alternate-selected-control-text');
// 替换为
systemPreferences.getColor('selected-content-background');

新特性

  • 添加了 safeStorage.setUsePlainTextEncryptionsafeStorage.getSelectedStorageBackend api。 #39107
  • 添加了 safeStorage.setUsePlainTextEncryptionsafeStorage.getSelectedStorageBackend api。 #39155
  • senderIsMainFrame添加到通过ipcRenderer.sendTo()发送的消息中。 #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的公开时间表

有关这些和未来变化的更多信息可在 计划的突破性变化 页面找到。

· 阅读时间:约 6 分钟

Electron 25.0.0 已发布! 此次升级中包含 Chromium 114,V8 11.4,和 Node.js 18.15.0 。 请阅读下文了解更多详情!


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

如果您有任何反馈,请在Twitter上与我们分享,或加入我们的社区 Discord! Bug 和功能请求可以在 Electron 的 问题跟踪器 中报告。

重要变化

重点内容

  • 使用 Chromium 的网络栈在 Electron 的 net 模块中实现了 net.fetch。 和 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 弃用计划。 请参阅本博文末尾的更多详细信息。

架构(Stack)更新

重大更改

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

protocol.register***Protocolprotocol.intercept***Protocol 方法 已替换为 protocol.handle

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

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

// 用以代替
protocol.handle('some-protocol', () => {
return new Response(
Buffer.from('<h5>Response</h5>'), // 也可以是 string 或 ReadableStream.
{ headers: { 'content-type': 'text/html' } }
);
});
// 在 Electron 25 中弃用
protocol.registerHttpProtocol('some-protocol', () => {
callback({ url: 'https://electronjs.org' });
});

// 用以代替
protocol.handle('some-protocol', () => {
return net.fetch('https://electronjs.org');
});
// 在 Electron 25 中弃用
protocol.registerFileProtocol('some-protocol', () => {
callback({ filePath: '/path/to/my/file' });
});

// 用以代替
protocol.handle('some-protocol', () => {
return net.fetch('file:///path/to/my/file');
});

弃用:BrowserWindow.setTrafficLightPosition(position)

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

// 在 Electron 25 中弃用
win.setTrafficLightPosition({ x: 10, y: 10 });
win.setTrafficLightPosition({ x: 0, y: 0 });

// 用以代替
win.setWindowButtonPosition({ x: 10, y: 10 });
win.setWindowButtonPosition(null);

弃用:BrowserWindow.getTrafficLightPosition()

BrowserWindow.getTrafficLightPosition() 已弃用,应使用 BrowserWindow.getWindowButtonPosition() 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 事件,每当 frame 层中的任何一个 frame 调用 navigate 时,都会触发该函数。 #34418
  • 向 navigator 事件添加了启动信息。 这个信息允许区分来自父框架 window.open 引起的 navigation 事件,而不是来自子框架发起的 navigation 事件。 #37085
  • 增加了 net.resolveHost,它使用 defaultSession 对象来解析 hosts。 #38152
  • app 添加了新的 'did-resign-active' 事件。 #38018
  • webContents.print() 添加了几个标准页面大小选项。 #37159
  • 向会话处理程序 ses.setDisplayMediaRequestHandler() 的回调中添加了 enableLocalEcho 标志,以允许当 audioWebFrameMain 时在本地输出流中回显远程音频输入。 #37315
  • powerMonitor 添加了 thermal 信息管理。 #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 日。 十月 支持日期遵循 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的公开时间表

有关这些和未来变化的更多信息可在 计划的突破性变化 页面找到。

· 阅读时间:约 5 分钟

Electron 24.0.0 已发布! 此次升级中包含 Chromium 112.0.5615.49,V8 11.2,和 Node.js 18.14.0 。 请阅读下文了解更多详情!


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

如果您有任何反馈,请在Twitter上与我们分享,或加入我们的社区 Discord! Bug 和功能请求可以在 Electron 的 问题跟踪器 中报告。

重要变化

架构(Stack)更新

重大更改

API Changed: nativeImage.createThumbnailFromPath(path, size)

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

// 一张 128x128 的图片。
const imagePath = path.join('path', 'to', 'capybara.png');

// 放大较小的图像。
const upSize = { width: 256, height: 256 };
nativeImage.createThumbnailFromPath(imagePath, upSize).then((result) => {
console.log(result.getSize()); // { width: 256, height: 256 }
});

// 缩小更大的图像。
const downSize = { width: 64, height: 64 };
nativeImage.createThumbnailFromPath(imagePath, downSize).then((result) => {
console.log(result.getSize()); // { width: 64, height: 64 }
});

新特性

  • 添加了使用 cookies.get() 过滤 cookie 中 HttpOnly 的功能。 #37365
  • logUsage 添加到 shell.openExternal() 参数中,以允许将 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 headers 配置文件中默认启用,允许编译器利用程序中所有模块的信息进行优化,而不是以每个模块 (compiland) 为基础。 #36937
  • SystemPreferences::CanPromptTouchID (macOS) 现在支持Apple Watch。 #36935

终止对 21.x.y 的支持

根据项目的支持政策,Electron 21.x.y 已经达到了支持的终点。 我们鼓励开发者将应用程序升级到更新的 Electron 版本。

As noted in Farewell, Windows 7/8/8.1, Electron 22's (Chromium 108) planned end of life date will be extended from May 30, 2023 to October 10, 2023. The Electron team will continue to backport any security fixes that are part of this program to Electron 22 until October 10, 2023.

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的公开时间表

有关这些和未来变化的更多信息可在 计划的突破性变化 页面找到。

· 阅读时间:约 16 分钟

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

由 @aroben 进行的 electron/electron 的初始提交。

经过10年和来自 1192 位贡献者的 27147 次提交之后,Electron 已成为如今构建桌面应用程序最受欢迎的框架之一。 这个里程碑是一个完美的机会,可以庆祝和回顾我们迄今为止的旅程,并分享我们沿途所学到的东西。

如果没有每个人都献出时间和努力为该项目做出贡献,我们今天就不会在这里了。 尽管源代码提交总是最显著的贡献,但我们还必须承认那些报告错误、维护用户空间模块、提供文档和翻译,并参与网络空间中的 Electron 社区的人所做出的努力。 对于我们作为维护者来说,每一份贡献都是无价之宝。

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

我们怎么发展到现在的?

Atom Shell 是为 GitHub Atom 编辑器 打造的基础框架,该编辑器于 2014 年 4 月公开发布 beta 版。 它是基于当时一些以网页为基础的桌面端框架 (node-webkit and Chromium Embedded Framework) 从头开始构建的替代方案。 它有一个杀手级功能:嵌入 Node.js 和 Chromium,为网页 技术提供一个强大的桌面运行时间。

一年之内,Atom Shell 的功能和知名度开始大幅增长。 大型公司、初创公司和个人开发者都已开始使用它构建应用程序。(一些早期采用者包括 Slack, GitKrakenWebTorrent), 该项目被恰当地重命名为 Electron

从那时起,Electron 便一发不可收拾,从未停止过。 这里是每周下载量随时间变化的趋势,由 npmtrends.com 提供:

Electron 每周下载量随时间变化的图表

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

到 Electron v6 时,我们转变为常规的 12 周主要发布节奏,以与 Chromium 相匹配。 这个决定是该项目心态的改变,将“拥有最新的 Chromium 版本”从一种附加功能变成了一项优先考虑的任务。 这降低了版本升级之间的技术债务量,使我们更容易地保持 Electron 的更新和安全。

从那时起,我们就像一台润滑良好的机器一样运转,每次 Chromium 稳定版发布时都会同时发布一个新的 Electron 版本。 到 2021 年,Chromium 加快了发布速度,每 4 周发布一次,而我们也能够轻松地调整发布频率为每 8 周。

现在我们已经更新到了 Electron v23 (并且还在继续更新),仍致力于构建最佳的跨平台桌面应用程序运行时。 尽管近年来 JavaScript 开发工具繁荣发展,但 Electron 仍然是桌面应用程序框架领域中一个稳定、经受过实战考验的重要支柱。 如今,Electron 应用程序已经无处不在:您可以使用 Visual Studio Code 进行编程,使用 Figma 进行设计,使用 Slack 进行通信,并使用 Notion 进行笔记记录 (还有许多其他用例)。 我们对这一成就感到非常自豪,并感谢使之成为可能的每一个人。

在这个过程中,我们学到了什么?

这十年的历程曲折而漫长。 以下是一些关键因素,帮助我们运营一个可持续的大型开源项目。

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

我们不得不克服的一个挑战是,在 Electron 初次爆发出人气后,如何处理项目的长期发展方向。 我们如何处理一个由几十名工程师组成、分布在不同公司、不同国家和不同时区的团队?

在早期,Electron 的维护者团队依靠非正式的协调方式,这对于较小的项目来说是快速和轻量级的,但不适用于更广泛的协作。 在2019年,我们转向了一种治理模型,不同的工作组拥有正式的责任领域。 这对于简化流程和将项目所有权的部分分配给特定的维护者非常重要。 现在每个工作组 (WG) 负责什么?

  • 将 Electron 发布上线 (Releases WG)
  • 升级 Chromium 和 Node.js (Upgrades WG)
  • 监督公共 API 设计 (API WG)
  • 保持 Electron 的安全性 (Security WG)
  • 运营网站、文档和工具 (Ecosystem WG)
  • 社区与企业外联 (Outreach WG)
  • 社区管理 (Community & Safety WG)
  • 维护我们的构建基础设施,维护者工具和云服务 (Infrastructure WG)

在我们转向治理模式的同时,我们还将 Electron 的所有权从 GitHub 转移到了 OpenJS Foundation 尽管原来的核心团队今天仍然在 Microsoft 工作,他们也仅仅是 Electron 治理团队这个庞大组织的一部分。2

虽然这种模式并不完美,但它在全球流行病和持续的宏观经济逆风中为我们提供了良好的支持。 今后,我们计划修订治理章程,以指导我们走向 Electron 的第二个十年。

info

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

社区

开源社区的组织是很困难的,特别是当你的外联团队是一群穿着“社区经理”外套的十几个工程师时。 话虽如此,成为一个大型的开源项目意味着我们拥有大量的用户,利用他们的能量来为 Electron 建立用户生态系统是维持项目健康的关键部分。

我们为发展社区做了哪些工作?

建立社区

  • 2020 年,我们推出了我们在 Discord server 的社区。 我们之前在 Atom 的论坛上有一个版块,但决定有一个更非正式的消息传递平台,让维护者和 Electron 开发人员之间有一个讨论的空间,并获得一般的调试帮助。
  • 2021 年,我们在 @BlackHole1 的帮助下建立了 Electron China 用户群。 这个群体在中国蓬勃发展的科技界中对 Electron 用户的增长起了重要作用,为他们在我们的英语语言的范畴之外提供了一个创意合作、讨论 Electron 的空间。 我们还要感谢 cnpm 为支持 Electron 在他们的中文镜像中为 npm 所做的工作。

参与高知名度的开源项目​

  • 自 2019 年以来,我们每年都会庆祝 Hacktoberest 。 Hacktoberfest 是由 DigitalOcean 组织的每年一度的开源庆典,每年我们都会有数十名热情的贡献者加入其中,希望在开源软件上留下自己的印记。
  • 在 2020 年,我们参加了首次举行的 Google Season of Docs 活动,与 @bandantonio 合作重新设计了 Electron 的新用户教程流程。
  • 2022年,我们第一次指导 Google Summer of Code 的学生。 @aryanshridhar做了一些了不起的工作,他重构了Electron Fiddle的核心版本的加载逻辑,并将bundler迁移到了 webpack

将所有东西自动化!

今天,Electron 的维护有大约 30 名积极的维护者。 我们中只有不到一半的人是全职贡献者,这意味着还有很多工作需要做。 我们怎么才能让一切顺利进行呢? 我们的座右铭是计算机便宜,人的时间是昂贵的。 按照典型的工程师风格,我们开发了一套自动化支持工具来使我们的生活更轻松。

Not Goma​

Electron 的核心代码库是一个庞大的 C++ 代码库,而编译时间一直是限制我们能够快速发布错误修复和新功能的因素之一。 在2020年,我们部署了Not Goma,这是一个专门为 Electron 定制的后端,用于 Google 的 Goma 分布式编译器服务。 Not Goma 处理来自授权用户机器的编译请求,并在后端的数百个核心上进行分布式编译。 它还会缓存编译结果,这样编译相同文件的其他人只需下载预编译的结果即可。

自从启用 Not Goma 以来,维护者的编译时间已经从几个小时缩短到几分钟的级别。 拥有稳定的互联网连接成为贡献者编译 Electron 的最低要求!

info

如果你是一个开源贡献者,你也可以尝试 Not Goma 的只读缓存,它默认在 Electron Build Tools 中提供。

Continuous Factor Authentication

Continuous Factor Authentication (CFA) 是 npm 双因素认证(2FA)系统的自动化层,我们将其与语义化版本控制工具(semantic-release)结合使用来管理我们各种 @electron/ npm 包的安全和自动化发布。

虽然语义化版本控制工具(semantic-release)已经自动化了 npm 包的发布过程,但它需要关闭两步验证或传递绕过此限制的秘密令牌。

我们构建了CFA 来为 npm 2FA 提供基于时间的一次性密码(TOTP),以供任意 CI 任务使用,从而让我们利用语义化版本控制工具(semantic-release)的自动化功能,同时保持双重身份验证的额外安全性。

我们使用 CFA 与 Slack 集成前端,允许维护人员在任何拥有 Slack 的设备上验证软件包发布,只要他们手头有 TOTP 生成器即可。

info

如果您想在自己的项目中尝试 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 标签,在先前的发行分支上尝试挑选补丁,从而自动化 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 的一部分.

· 阅读时间:约 4 分钟

Electron 23.0.0 已发布! 此次升级中包含 Chromium 110, V8 11.0, 和 Node.js 18.12.1。 此外,取消了对Windows 7/8.1的支持。 请阅读下文了解更多详情!


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

如果您有任何反馈,请在Twitter上与我们分享,或加入我们的社区 Discord! Bug 和功能请求可以在 Electron 的 问题跟踪器 中报告。

重要变化

架构(Stack)更新

新特性

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

放弃对 Windows 7/8.1 支持

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

重要的API变更

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

已删除: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 年 1 月)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的公开时间表

有关这些和未来变化的更多信息可在 计划的突破性变化 页面找到。

· 阅读时间:约 7 分钟

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 install electron@latest 进行安装,或者从我们的 发布网站 下载它。 继续阅读此版本的详细信息。

如果您有任何反馈,请在Twitter上与我们分享,或加入我们的社区 Discord! Bug 和功能请求可以在 Electron 的 问题跟踪器 中报告。

重要变化

架构(Stack)更新

主要特性

UtilityProcess API #36089

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

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

Windows 7/8/8.1 支持更新

info

2023/02/16: An update on Windows Server 2012 support

Last month, Google announced that Chrome 109 would continue to receive critical security fixes for Windows Server 2012 and Windows Server 2012 R2 until October 10, 2023. In accordance, Electron 22's (Chromium 108) planned end of life date will be extended from May 30, 2023 to October 10, 2023. The Electron team will continue to backport any security fixes that are part of this program to Electron 22 until October 10, 2023.

Note that we will not make additional security fixes for Windows 7/8/8.1. Also, Electron 23 (Chromium 110) will only function on Windows 10 and above as previously announced.

Electron 22 将是最后一个支持 Windows 7/8/8.1 的 Electron 主要版本。 Electron 遵循计划中的 Chromium 弃用政策,该政策将 [在 Chromium 109 中弃用 Windows 7/8/8.1 支持(在此处阅读更多信息)](https://support.google.com/chrome/thread/185534985/sunsetting-support-for-windows-7-8-8-1-in-early -2023?hl=en)。

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 中引入的破坏性变更。 您可以在 Planned Breaking Changes 页面上阅读有关这些更改和未来更改的更多信息。

已废弃: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 事件已被删除。 相反,使用新的 input-event WebContents 上的事件

// 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 (2022年5月)E20 (8月22日)E21 (2022年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的公开时间表

有关这些和未来变化的更多信息可在 计划的突破性变化 页面找到。

· 阅读时间:约 3 分钟

Electron 将在 Electron23 中开始结束 Windows 7, Windows 8 和 Windows 8.1 的支持。


In line with Chromium’s deprecation policy, Electron will end support of Windows 7, Windows 8 and Windows 8.1 beginning in Electron 23. This matches Microsoft's end of support for Windows 7 ESU and Windows 8.1 extended on January 10th, 2023.

Electron 22 will be the last Electron major version to support Windows versions older than 10. Electron 23 及以后的主要版本将不支持 Windows 7/8/8.1。 Older versions of Electron will continue to function on Windows 7, and we will continue to release patches for Electron the 22.x series until May 30 2023, when Electron will end support for 22.x (according to our support timeline).

为什么要废弃它?

Electron 遵循计划中的Chromium 弃置策略,它将不支持Chromium 109 (在这里阅读更多关于 Chromium 的时间表)。 Electron 23 将包含 Chromium 110, 它不支持旧版本的Windows。

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

弃用时间表

The following is our planned deprecation timeline:

  • 2022 年 12 月:Electron 团队将度过一段假期,此时将不会有大的动向。
  • January 2023: Windows 7 & 8 related issues are accepted for all supported release branches.
  • 2023 年 2 月 7 日: Electron 23 将发布。
  • February 8 2023 - May 29 2023: Electron will continue to accept fixes for supported lines older than Electron 23.
  • 2023: Electron 22 迎来其支持周期的终结。

这对开发者意味着什么:

  • The Electron team will accept issues and fixes related to Windows 7/8/8.1 for stable supported lines, until each line reaches the end of its support cycle.
    • This specifically applies to Electron 22, Electron 21 and Electron 20.
  • New issues related to Windows 7/8/8.1 will be accepted for Electron versions older than Electron 23.
    • New issues will not be accepted for any newer release lines.
  • Once Electron 22 has reached the end of its support cycle, all existing issues related to Windows 7/8/8.1 will be closed.
info

2023/02/16: An update on Windows Server 2012 support

Last month, Google announced that Chrome 109 would continue to receive critical security fixes for Windows Server 2012 and Windows Server 2012 R2 until October 10, 2023. In accordance, Electron 22's (Chromium 108) planned end of life date will be extended from May 30, 2023 to October 10, 2023. The Electron team will continue to backport any security fixes that are part of this program to Electron 22 until October 10, 2023.

Note that we will not make additional security fixes for Windows 7/8/8.1. Also, Electron 23 (Chromium 110) will only function on Windows 10 and above as previously announced.

下一步

Please feel free to write to us at info@electronjs.org if you have any questions or concerns. 您也可以在我们官方的 Electron Discord 中找到社区支持。

· 阅读时间:约 2 分钟

2022年12月Electron项目将进入暂停状态,然后在2023年1月全速恢复。

通过 GIPHY


12月保持不变的内容

  1. 必要时将发布零日和其他与安全相关的主版本。 安全事件应该通过 SECURITY.md 报告。
  2. 行为准则报告和审核将继续。

12月变动的内容

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

为什么会发生这种情况?

With the success of December Quiet Month 2021, we wanted to bring it back for 2022. 对于大多数公司来说,12 月仍然是一个安静的月份,所以我们希望给我们的维护者一个充电的机会。 每个人都期待着2023年的到来,我们期待着会有好事! 我们鼓励其他项目考虑采取类似措施。

· 阅读时间:约 9 分钟

我们很高兴地宣布 Electron Forge v6.0.0 现已推出! 此版本标志着自 2018 年以来 Forge 的第一个主要版本,并将该项目从 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 样板模板
  • ⚙️ 原生 Node.js 模块支持
  • 🔌 可扩展的 JavaScript 插件 API
延伸阅读

访问 Why Electron Forge 文档,了解更多关于 Forge 的理念和架构信息。

v6 中有什么新功能?

完全重构

从 v1 到 v5,Electron Forge 是在现已停止的 electron-compile 项目的基础上进行开发的。 Forge 6 是对项目的完全重构,具有新的模块化架构,可以扩展以满足大多数 Electron 应用程序的需求。

在过去的几年里,Forge v6.0.0-beta 已经实现了与 v5 相同的功能,并且代码流失速度显着放缓,使该工具为普遍采用做好了准备。

不要安装错误的软件包

对于 v5 及更低的版本,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 Bundling 及预先配置好的构建体系。

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

优先支持 webpack

上面的代码片段使用了 Forge 的 Webpack 模板,我们建议将其作为新 Electron 项目的初始化配置。 此模板是围绕 @electron-forge/plugin-webpack 插件构建的,该插件以几种方式将 webpack 与 Electron Forge 集成,包括:

  • 使用 webpack-dev-server 增强本地开发流程,包括在渲染器中支持 HMR;
  • 在应用程序打包之前处理 webpack 包的构建逻辑; 并且
  • 在 webpack bundling 过程中添加对 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 测试版用户,请参阅 v6.0 GitHub 更新日志 了解最近测试版中所做的重大变更 (>=6.0.0-beta.65)。

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

提交您的反馈!

告诉我们您的想法! Electron Forge 团队一直在尝试提升用户在构建项目时候的开发体验。

您可以通过提交功能请求、提交 issues 或直接联系我们来进行反馈及改进 Electron Forge! 您也可以加入我们的 官方 Electron Discord 英文社区,那里有一个专门用于 Electron Forge 讨论的频道。

如果您想在 https://electronforge.io 上对 Forge 文档提供任何反馈,我们有一个 GitBook 实例同步到 electron-forge/electron-forge-docs 存储库。

· 阅读时间:约 8 分钟

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

合影! 取自 @groundwater

今后,团队仍将全力以赴,定期快速发布Chromium 升级和 bug 修复,以确保 Electron 对每个人都更安全、更高效。 我们也有一些令人兴奋的项目正在进行,我们很乐意与社区分享!

变革性的新 API

Electron 项目中需要达成共识的主要 API 提案需要通过申请 (RFC) 流程后,由我们的 API 工作组成员审核。

今年,我们推动了两项主要提案,这些提案有可能为 Electron 应用程序开启一个新的功能维度。 这些建议是实验性很强的,在这里可以先睹为快!

新的原生附加组件 (C API)

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

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

许多 Electron 应用程序都有维护自己的分支,以便直接访问 Chromium 内部资源,而普通的(未修改的)Electron 是无法访问这些资源的。 通过在 C API 层中公开这些资源,这些代码可以作为原生模块与 Electron 一起存在,从而可能减少应用程序开发人员的维护负担。

开放 Chromium 的 UI 层 (Views API)

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

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

示例:将窗口模型重置为 WebContentsView

我们计划的第一次更改是在 Electron 的 API 中显示 Chrome 的 WebContentsView。这将 是我们现有的 BrowsView API 的继承者(尽管该名称是 Electron 指定的代码 与 Chromium 视图无关)。 随着 WebContentsView 暴露,我们将有一个可重用的 View 对象 可以显示网页内容,为使 BrowserWindow 类成为纯粹的 JavaScript 打开了大门。 更多的消除了代码复杂性。

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

如果您是一个使用 BrowserViews 的 Electron 开发者,请勿担心,我们没有忘记您! 我们计划将现有的 BrowserView 类变成一个 WebContentsView 的垫片(shim),以便在您过渡到较新的 API 时提供一个缓冲。

见: electron/electron#35658

示例:使用 ScrollView 滚动网页

我们在 Stack 的朋友一直在推动一项倡议,将 Chromium ScrollView 组件暴露给 Electron 的 API。 通过这个新的 API,任何子视图组件都可以水平滚动或 垂直滚动。

尽管这个新的 API 实现了一个较小的功能,但该团队的最终目标是建立 一套实用的视图组件,可以作为一个工具包来构建更复杂的非 HTML 接口。

加入我们

你是 Electron 应用程序的开发者,对这些 API 提案感兴趣吗? 虽然我们还没有准备好接收更多的 RFC,但请继续关注未来的更多细节!

Electron Forge v6 稳定发布

自从该框架诞生以来,Electron 的构建工具生态系统在很大程度上是由社区驱动的。 社区驱动的,由许多小型的单用途包组成(例如 electron-installer, 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 审查流程和增强的文档是我们正在试验的事情。 我们希望在不久的将来有更多的消息可以与大家分享!