跳到主内容

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