跳转到主要内容

Electron 1.0 即将到来的 API 变更

·阅读时长 4 分钟

自 Electron(最初名为 Atom-Shell)诞生以来,我们就一直在尝试为 Chromium 的内容模块和原生 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 名称过去倾向于对所有 API 名称使用驼峰式命名,例如 `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`