作者 | Electron 团队
译者 | 王强
策划 | 李俊辰
“真香”定律再度应验。
Electron 团队宣布 Electron 9.0.0 正式发布。新版包括了 Chromium 83、V8 8.3 和 Node.js 12.14 几个组件的升级。此次更新为拼写检查器功能添加了几个新的 API 集成,并新增了 PDF 查看器,还有很多其他的更新。
新版本包含众多升级、修补程序和新功能,本文会介绍这个版本的更新细节。开发者可以在 npm 上使用 npm install electro@latest 命令安装,或从 Electron 的发行网站下载:
https://electronjs.org/releases/stable
值得关注的更改
栈更改
- Chromium 83.0.4103.64
- Chrome 81 的新特性
- https://developers.google.com/web/updates/2020/04/nic81
- 跳过 Chrome 82
- https://chromereleases.googleblog.com/2020/03/chrome-and-chrome-os-release-updates.html
- Chrome 83 的新特性
- https://developers.google.com/web/updates/2020/05/nic83
- Chrome 81 的新特性
- Node.js 12.14.1
- Node 12.14.1 介绍
- https://nodejs.org/en/blog/release/v12.14.1/
- Node 12.14.1 介绍
- V8 8.3
- V8 8.1 介绍
- https://v8.dev/blog/v8-release-81
- V8 8.3 介绍
- https://v8.dev/blog/v8-release-83
- V8 8.1 介绍
重要特性
- 拼写检查器功能新增多项改进。请参阅 #22128 和 #22368 了解更多细节。
- Linux 上的窗口事件处理程序效率提升。#23260。
- 新增 PDF 查看器。#22131。
关于新功能和更改的完整列表,请参见 9.0.0 发行说明:
https://github.com/electron/electron/releases/tag/v9.0.0
重大改进
- 使用 remote 模块时如不带 enableRemoteModle: true,会发出弃用警告。#21546
- 这是我们计划弃用 remote 模块并将其移至用户区的第一步。可以关注这个 issue 了解细节,其中详细说明了此举的原因,还列出了建议的弃用时间表:
- https://github.com/electron/electron/issues/21408
- 这是我们计划弃用 remote 模块并将其移至用户区的第一步。可以关注这个 issue 了解细节,其中详细说明了此举的原因,还列出了建议的弃用时间表:
- 默认情况下,将 app.enableRendererProcessReuse 设置为 true。#22336
- 这是一项持续性工作,针对未来的一个需求,即渲染器进程中加载的原生 Node 模块应为 N-API 或 Context Aware 之一。这个 issue 详细介绍了完整的信息和建议的时间表:
- https://github.com/electron/electron/issues/18397
- 这是一项持续性工作,针对未来的一个需求,即渲染器进程中加载的原生 Node 模块应为 N-API 或 Context Aware 之一。这个 issue 详细介绍了完整的信息和建议的时间表:
- 现在,通过 IPC 发送非 JavaScript 对象会抛出异常。#21560
- 此行为在 Electron 8.0 中已弃用。在 Electron 9.0 中,旧的序列化算法已被移除,现在,发送这一类不可序列化的对象将出现“object could not be cloned(无法克隆的对象)”错误。
关于这些改进以及未来改进的更多信息,请参阅“计划的重大改进”页面:
https://github.com/electron/electron/blob/master/docs/breaking-changes.md
API 更改
- shell API 更改:
- shell.openItem API 已替换为异步的 shell.openPath API:
- https://github.com/electron/governance/blob/master/wg-api/spec-documents/shell-openitem.md
- shell.openItem API 已替换为异步的 shell.openPath API:
- session API 更改:
- 添加了 session.listWordsFromSpellCheckerDictionary API,以列出字典中的自定义单词。#22128
- 添加了 session.removeWordFromSpellCheckerDictionary API,以删除字典中的自定义单词。#22368
- 添加了 session.serviceWorkerContext API,以访问基本服务 worker 信息并接收来自服务 worker 的控制台日志。#22313
- app API 更改:
- 在 macOS 上的 app.focus() 中添加了一个新的 force 参数,以允许应用强制聚焦。#23447
- BrowserWindow API 更改:
- 添加了对 BrowserWindow 上某些 getter/setter 对的属性访问的支持。#23208
弃用的 API
新版已弃用或移除了以下 API:
- shell.openItem API 现已弃用,并用异步的 shell.openPath API 代替。
- .getWebContents(在 Electron 8.0 中已弃用)现已移除。
- webFrame.setLayoutZoomLevelLimits(在 Electron 8.0 中已弃用)现已移除。
对 6.x.y 的支持终止
根据项目的支持政策,Electron 6.x.y 已达到支持终止阶段。我们鼓励开发人员和应用程序升级到新版本的 Electron。
下一步计划
在短期内,你可以期望团队继续专注于构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发工作。虽然我们不会对未来版本的发布日期做出明确的保证,但我们的计划是大约每个季度更新 Electron 的主版本,同时更新这些组件的版本。暂定的 10.0.0 时间表中列出了 Electron 10.0 开发周期中的关键时点:
https://electronjs.org/docs/tutorial/electron-timelines
另请参阅我们的版本控制文档,获取有关 Electron 中版本控制的更多细节:
https://electronjs.org/docs/tutorial/electron-versioning
关于未来的 Electron 版本中计划的重大更改细节,请参阅我们计划中的重大更改文档:
https://github.com/electron/electron/blob/master/docs/breaking-changes.md
将 contextIsolation 的默认值从 false 更改为 true(从 Electron 10 开始)
如果没有 contextIsolation,在渲染器进程中运行的任何代码都可以很容易地进入 Electron 内部或应用的预加载脚本中。然后这些代码就可以执行一些 Electron 想要限制的特权操作了。
更改这个默认设置可提高 Electron 应用的默认安全性,新设置下应用需要主动开启选项才能执行不安全行为。Electron 将在 Electron 10.0 中弃用 contextIsolation 当前的默认值,并在 Electron 12.0 中更改为新的默认值(true)。
关于 contextIsolation 的介绍、启用方法以及安全性细节,请参阅我们专门编写的 Context Isolation 文档:
https://github.com/electron/electron/blob/master/docs/tutorial/context-isolation.md
针对新版的反馈可通过 Twitter 提交:
https://twitter.com/electronjs
需要帮助或提交 bug,请联系:
https://www.electronjs.org/contact
延伸阅读
https://www.electronjs.org/blog/electron-9-0