跳到主要内容

Electron 1.0 即将到来的 API 变更

·4 分钟阅读

自从 Electron 诞生之初,那时它还被称为 Atom-Shell,我们就一直在尝试为 Chromium 的 content 模块和原生 GUI 组件提供一个不错的跨平台 JavaScript API。API 最初的开发非常自然,随着时间的推移,我们对其初始设计进行了一些改进。


现在,随着 Electron 准备发布 1.0 版本,我们想借此机会通过解决最后的 API 细节问题来进行更改。以下描述的更改包含在 0.35.x 中,旧的 API 会报告弃用警告,因此您可以为将来的 1.0 版本做好准备。Electron 1.0 不会在几个月内发布,因此您在这些更改变成破坏性更改之前还有一些时间。

弃用警告

默认情况下,如果您正在使用已弃用的 API,则会显示警告。要关闭警告,您可以将 process.noDeprecation 设置为 true。要跟踪已弃用 API 使用的来源,您可以将 process.throwDeprecation 设置为 true 以抛出异常而不是打印警告,或者将 process.traceDeprecation 设置为 true 以打印弃用的跟踪。

使用内置模块的新方法

内置模块现在被分组到一个模块中,而不是被分成独立的模块,因此您可以使用它们而不会与其他模块冲突

var app = require('electron').app;
var BrowserWindow = require('electron').BrowserWindow;

为了向后兼容,仍然支持旧的 require('app') 方法,但您也可以将其关闭

require('electron').hideInternalModules();
require('app'); // throws error.

一种更简单的方式来使用 remote 模块

由于使用内置模块的方式发生了变化,我们使得在渲染器进程中使用主进程侧模块更加容易。您现在只需访问 remote 的属性即可使用它们

// New way.
var app = require('electron').remote.app;
var BrowserWindow = require('electron').remote.BrowserWindow;

而不是使用长 require 链

// Old way.
var app = require('electron').remote.require('app');
var BrowserWindow = require('electron').remote.require('BrowserWindow');

拆分 ipc 模块

ipc 模块存在于主进程和渲染器进程中,并且每侧的 API 都不同,这对于新用户来说非常令人困惑。我们已将主进程中的模块重命名为 ipcMain,并将渲染器进程中的模块重命名为 ipcRenderer,以避免混淆

// In main process.
var ipcMain = require('electron').ipcMain;
// In renderer process.
var ipcRenderer = require('electron').ipcRenderer;

对于 ipcRenderer 模块,在接收消息时添加了一个额外的 event 对象,以匹配 ipcMain 模块中处理消息的方式

ipcRenderer.on('message', function (event) {
console.log(event);
});

标准化 BrowserWindow 选项

BrowserWindow 选项的样式基于其他 API 的选项而有所不同,并且由于名称中带有 - 而在 JavaScript 中有点难用。现在它们已标准化为传统的 JavaScript 名称

new BrowserWindow({ minWidth: 800, minHeight: 600 });

遵循 DOM 的 API 名称约定

Electron 中的 API 名称过去都倾向于使用 camelCase,例如将 Url 写成 URL,但是 DOM 有自己的约定,它们倾向于将 URL 写成 Url,而使用 Id 而不是 ID。我们已进行以下 API 重命名以匹配 DOM 的样式

  • Url 被重命名为 URL
  • Csp 被重命名为 CSP

由于这些更改,当您为应用程序使用 Electron v0.35.0 时,您会注意到许多弃用。修复它们的简单方法是用 URL 替换所有 Url 实例。

Tray 的事件名称更改

Tray 事件名称的样式与其他模块略有不同,因此已进行重命名以使其与其他模块匹配。

  • clicked 被重命名为 click
  • double-clicked 被重命名为 double-click
  • right-clicked 被重命名为 right-click