Electron 1.0 即将到来的 API 变更
自 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`