跳转到主要内容

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 名称使用驼峰式命名法,例如 UrlURL,但 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`