跳到主要内容

Electron 6.0.0

·4 分钟阅读

Electron 团队很高兴地宣布发布 Electron 6.0.0!您可以通过 npm 安装,使用命令 npm install electron@latest,或者从我们的发布网站下载。此版本包含多项升级、修复和新功能。我们期待看到您用它们构建出怎样的应用!请继续阅读以了解此版本的详细信息,并随时分享您的反馈!


新特性

今天是 Electron 项目的里程碑:这是我们首次与相应的 Chrome 稳定版发布同一天发布 Electron 稳定版!🎉

Electron 的大部分功能由 Chromium、Node.js 和 V8 等核心组件提供。Electron 与这些项目保持同步更新,以便为用户提供新的 JavaScript 特性、性能改进和安全修复。Electron 6 中,这些包的版本都进行了主要升级:

本次发布还包含了对 Electron API 的改进。发布说明中有更完整的列表,以下为重点内容:

Promise 化

Electron 6.0 继续了 5.0 版本开始的现代化计划,以改进 Promise 支持。

这些函数现在返回 Promise,并且仍然支持旧的回调式调用:

  • contentTracing.getCategories() #16583
  • contentTracing.getCategories() #16583
  • contentTracing.getTraceBufferUsage() #16600
  • contents.executeJavaScript() #17312
  • cookies.flushStore() #16464
  • cookies.get() #16464
  • cookies.remove() #16464
  • cookies.set() #16464
  • dialog.showCertificateTrustDialog() #17181
  • inAppPurchase.getProducts() #17355
  • inAppPurchase.purchaseProduct()#17355
  • netLog.stopLogging() #16862
  • session.clearAuthCache() #17259
  • session.clearCache() #17185
  • session.clearHostResolverCache() #17229
  • session.clearStorageData() #17249
  • session.getBlobData() #17303
  • session.getCacheSize() #17185
  • session.resolveProxy() #17222
  • session.setProxy() #17222
  • webContents.hasServiceWorker() #16535
  • webContents.printToPDF() #16795
  • webContents.savePage() #16742
  • webFrame.executeJavaScript() #17312
  • webFrame.executeJavaScriptInIsolatedWorld() #17312
  • webviewTag.executeJavaScript() #17312

这些函数现在有两种形式:同步和基于 Promise 的异步:

  • dialog.showMessageBox()/dialog.showMessageBoxSync() #17298
  • dialog.showOpenDialog()/dialog.showOpenDialogSync() #16973
  • dialog.showSaveDialog()/dialog.showSaveDialogSync() #17054

这些函数现在返回 Promise:

Electron Helper (Renderer).appElectron Helper (GPU).appElectron Helper (Plugin).app

为了启用硬化运行时 (hardened runtime),它限制了诸如可写可执行内存和加载由不同 Team ID 签名的代码等操作,需要向 Helper 授予特殊的代码签名权利 (entitlements)。

为了将这些权利的范围限制在需要它们的进程类型内,Chromium 添加了 Helper 应用的三个新变体:一个用于渲染器进程 (Electron Helper (Renderer).app),一个用于 GPU 进程 (Electron Helper (GPU).app),一个用于插件进程 (Electron Helper (Plugin).app)。

使用 electron-osx-sign 对 Electron 应用进行代码签名的用户无需更改其构建逻辑。如果您使用自定义脚本进行代码签名,应确保这三个新的 Helper 应用已正确签名。

为了使用这些新的 Helper 正确打包您的应用,您需要使用 electron-packager@14.0.4 或更高版本。如果您使用的是 electron-builder,应关注此 issue 来跟踪对这些新 Helper 的支持情况。

重大更改

  • 本次发布开始为将来的要求奠定基础,即在渲染器进程中加载的原生 Node 模块必须是 N-APIContext Aware。此更改的原因是更快的性能、更强的安全性和减少维护工作量。请在此 issue 中阅读包括提议时间表在内的完整详情。预计此更改将在 Electron v11 中完成。

  • net.IncomingMessage 的 headers 略有变化,以更接近 Node.js 的行为,尤其是在处理 set-cookie 的值和重复 header 的方式上。#17517

  • shell.showItemInFolder() 现在返回 void,并且是一个异步调用。#17121

  • 应用现在必须在使用 app.getPath('log') 之前调用新函数 app.setAppLogPath() 来显式设置日志路径。#17841

停止支持 3.x.y

根据我们的支持策略,3.x.y 版本已停止维护。建议开发者和应用升级到更新的 Electron 版本。

应用反馈计划

我们继续使用我们的应用反馈计划进行测试。参与此计划的项目在其应用上测试 Electron beta 版本;作为回报,他们发现的新错误会在稳定版发布前被优先处理。如果您想参与或了解更多信息,请查看我们关于该计划的博文

后续计划

短期内,您可以期待团队继续专注于跟进构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。虽然我们谨慎地不承诺具体的发布日期,但我们的计划是大约每季度发布包含这些组件新版本的 Electron 主要版本。Electron 7.0.0 的暂定时间表列出了 Electron 7 开发生命周期中的关键日期。此外,有关 Electron 版本控制的更详细信息,请参阅我们的版本控制文档

有关 Electron 即将版本中计划的重大更改的信息,请参阅我们的计划重大更改文档