跳至主要内容

带有“功能”标签的 5 篇文章

展示 Electron 核心中的新功能

查看所有标签

推出 electron/rfcs

·阅读时间 3 分钟

Electron 的 API 工作组 正在采用开放的意见征集 (RFC) 流程来帮助指导 Electron 核心中的重大更改。

为什么使用 RFC?

简而言之,我们希望简化 Electron 核心重大更改的落地流程。

目前,新的代码更改主要通过 GitHub 上的问题和拉取请求进行讨论。对于 Electron 的大多数更改,这是一个良好的系统。许多错误修复、文档更改,甚至新功能都足够简单,可以通过标准的 GitHub 流程异步审查和合并。

对于更重大的更改——例如,会影响大多数 Electron 应用的大型 API 表面或重大更改——在编写大部分代码之前,在构思阶段进行审查是有意义的。

此流程旨在向公众开放,这也有助于开源社区更容易在更改落地到 Electron 之前提供反馈。

它是如何运作的?

整个 RFC 流程都位于 GitHub 上的 electron/rfcs 存储库中。这些步骤在存储库的 README 中进行了详细描述。

简而言之,一旦向 electron/rfcs 存储库提交 PR,RFC 就会被提议。提议的 RFC 会变成

  • 活跃,当 PR 合并到存储库的 main 分支时,这意味着 Electron 维护人员同意在 electron/electron 中进行实现,或者
  • 拒绝,如果 PR 最终被拒绝。
信息

要使 RFC 成为活跃状态,PR 必须至少获得 2 位 API 工作组成员的批准。在合并之前,应由至少三分之二的 WG 成员组成的法定人数同步展示 RFC 并获得一致同意。如果达成共识,将触发为期一个月的最终评论期,之后 PR 将被合并。

如果实现已合并到 electron/electron 中,则活跃的 RFC 将被完成

谁可以参与?

Electron 社区中的任何人都可以提交 RFC 或在 electron/rfcs 存储库中留下反馈!

我们希望将此流程变成双向对话,并鼓励社区参与,以获得来自将来可能使用这些 API 的 Electron 应用的多样化意见。如果您有兴趣对当前提议的 RFC 留下反馈,Electron 维护人员已经创建了一些

致谢

Electron 的 RFC 流程借鉴了许多已建立的开源 RFC 流程。许多想法和主要部分的文案灵感来自

Apple Silicon 支持

·阅读时间 3 分钟

随着 Apple Silicon 硬件将在今年晚些时候发布,您将如何让您的 Electron 应用在新的硬件上运行?


随着 Electron 11.0.0-beta.1 的发布,Electron 团队现在正在发布 Electron 的构建版本,这些版本可以在 Apple 计划在今年晚些时候发布的新 Apple Silicon 硬件上运行。您可以使用 npm install electron@beta 获取最新的测试版,或直接从我们的 发布网站 下载。

它是如何运作的?

从 Electron 11 开始,我们将为英特尔 Mac 和 Apple Silicon Mac 发布单独的 Electron 版本。在此更改之前,我们已经发布了两个工件,darwin-x64mas-x64,后者用于 Mac App Store 兼容性使用。我们现在正在发布另外两个工件,darwin-arm64mas-arm64,它们分别是上述工件的 Apple Silicon 等效项。

我需要做什么?

您需要发布两个版本的应用:一个用于 x64(英特尔 Mac),一个用于 arm64(Apple Silicon)。好消息是 electron-packagerelectron-rebuildelectron-forge 已经支持针对 arm64 架构。只要您运行的是这些软件包的最新版本,更新目标架构到 arm64 后,您的应用应该可以完美运行。

未来,我们将发布一个软件包,允许您将 arm64x64 应用“合并”成一个通用的二进制文件,但需要注意的是,这个二进制文件会非常大,可能不适合分发给用户。

更新:此软件包现已在 @electron/universal 中提供。您可以使用它将两个打包的 x64 和 arm64 应用合并成一个二进制文件。

潜在问题

原生模块

由于您正在针对新的架构,因此您需要更新几个依赖项,这可能会导致构建问题。为了参考,下面列出了某些依赖项的最低版本。

依赖项版本要求
Xcode>=12.2.0
node-gyp>=7.1.0
electron-rebuild>=1.12.0
electron-packager>=15.1.0

由于这些依赖项版本的要求,您可能需要修复/更新某些原生模块。需要注意的是,Xcode 升级将引入新版本的 macOS SDK,这可能会导致您的原生模块构建失败。

如何测试?

目前,Apple Silicon 应用程序只能在 Apple Silicon 硬件上运行,在撰写此博文时,此硬件尚未公开销售。如果您拥有 开发者过渡套件,则可以在其上测试您的应用程序。否则,您需要等到生产 Apple Silicon 硬件发布后才能测试您的应用程序是否正常工作。

Rosetta 2 怎么样?

Rosetta 2 是 Apple 最新版本的 Rosetta 技术,它允许您在其新的 arm64 Apple Silicon 硬件上运行 x64 Intel 应用程序。尽管我们相信 x64 Electron 应用将在 Rosetta 2 下运行,但有一些重要事项需要注意(以及您应该发布原生 arm64 二进制文件的原因)。

  • 您的应用性能将显着下降。Electron/V8 使用 JIT 编译 JavaScript,并且由于 Rosetta 的工作原理,您实际上将运行两次 JIT(一次在 V8 中,一次在 Rosetta 中)。
  • 您将无法获得 Apple Silicon 中的新技术的优势,例如更大的内存页大小。
  • 我们有提到性能会显着下降吗?

Electron 2 中的新增功能:应用内购买

·阅读时间:2分钟

新的 Electron 2.0 版本系列 包含 了许多新功能和修复。这个新主要版本的一个亮点是为 Apple 的 Mac App Store 提供的新 inAppPurchase API


应用内购买允许直接在应用内购买内容或订阅。这为开发者提供了一种简单的方法来采用 免费增值商业模式,在这种模式下,用户无需支付任何费用即可下载应用,并可以选择应用内购买高级功能、额外内容或订阅。

社区贡献者 Adrien Fery 为 Electron 添加了这个新的 API,以便在 Amanote 中启用应用内购买,Amanote 是一款用于讲座和会议的笔记 Electron 应用。Amanote 可免费下载,并允许将清晰且结构化的笔记添加到 PDF 中,并提供数学公式、绘图、音频录制等功能。

自从为 Amanote 的 Mac 版本添加了应用内购买支持后,Adrien 发现销售额增长了 40%

入门

新的 inAppPurchase API 已经包含在最新的 Electron beta 版本中。

npm i -D electron@beta

可以在 GitHub 上找到 API 的文档,Adrien 还很友好地撰写了一个关于如何使用该 API 的教程。要开始在您的应用中添加应用内购买,请 查看教程

对 API 的更多 改进 正在进行中,并将很快包含在即将发布的 Electron beta 版本中。

Windows 可能是下一个

接下来,Adrien 希望通过在 Electron 中添加对 Microsoft Store 应用内购买的支持,为 Amanote 开辟新的收入渠道。敬请关注这方面的进展!

Touch Bar 支持

·阅读时间 3 分钟

Electron 1.6.3 beta 版本包含了对 macOS Touch Bar 的初步支持。


新的 Touch Bar API 允许您添加按钮、标签、弹出窗口、颜色选择器、滑块和间隔符。这些元素可以动态更新,并且在与之交互时还会发出事件。

这是此 API 的第一个版本,因此它将在接下来的几个 Electron 版本中不断发展。请查看发行说明以获取进一步更新,并针对任何问题或缺少的功能打开 问题

您可以通过 npm install electron@beta 安装此版本,并在 TouchBarBrowserWindow Electron 文档中了解更多信息。

非常感谢 @MarshallOfSound 为 Electron 做出的贡献。🎉

Touch Bar 示例

Touch Bar Gif

下面是一个在触控栏中创建简单的老虎机游戏的示例。它演示了如何创建触控栏、设置项目样式、将其与窗口关联、处理按钮点击事件以及动态更新标签。

const { app, BrowserWindow, TouchBar } = require('electron');

const { TouchBarButton, TouchBarLabel, TouchBarSpacer } = TouchBar;

let spinning = false;

// Reel labels
const reel1 = new TouchBarLabel();
const reel2 = new TouchBarLabel();
const reel3 = new TouchBarLabel();

// Spin result label
const result = new TouchBarLabel();

// Spin button
const spin = new TouchBarButton({
label: '🎰 Spin',
backgroundColor: '#7851A9',
click: () => {
// Ignore clicks if already spinning
if (spinning) {
return;
}

spinning = true;
result.label = '';

let timeout = 10;
const spinLength = 4 * 1000; // 4 seconds
const startTime = Date.now();

const spinReels = () => {
updateReels();

if (Date.now() - startTime >= spinLength) {
finishSpin();
} else {
// Slow down a bit on each spin
timeout *= 1.1;
setTimeout(spinReels, timeout);
}
};

spinReels();
},
});

const getRandomValue = () => {
const values = ['🍒', '💎', '7️⃣', '🍊', '🔔', '⭐', '🍇', '🍀'];
return values[Math.floor(Math.random() * values.length)];
};

const updateReels = () => {
reel1.label = getRandomValue();
reel2.label = getRandomValue();
reel3.label = getRandomValue();
};

const finishSpin = () => {
const uniqueValues = new Set([reel1.label, reel2.label, reel3.label]).size;
if (uniqueValues === 1) {
// All 3 values are the same
result.label = '💰 Jackpot!';
result.textColor = '#FDFF00';
} else if (uniqueValues === 2) {
// 2 values are the same
result.label = '😍 Winner!';
result.textColor = '#FDFF00';
} else {
// No values are the same
result.label = '🙁 Spin Again';
result.textColor = null;
}
spinning = false;
};

const touchBar = new TouchBar([
spin,
new TouchBarSpacer({ size: 'large' }),
reel1,
new TouchBarSpacer({ size: 'small' }),
reel2,
new TouchBarSpacer({ size: 'small' }),
reel3,
new TouchBarSpacer({ size: 'large' }),
result,
]);

let window;

app.once('ready', () => {
window = new BrowserWindow({
frame: false,
titleBarStyle: 'hidden-inset',
width: 200,
height: 200,
backgroundColor: '#000',
});
window.loadURL('about:blank');
window.setTouchBar(touchBar);
});

在 Electron 中使用 V8 和 Chromium 功能

·阅读时间:2分钟

构建 Electron 应用程序意味着您只需要为一个浏览器创建一个代码库和设计,这非常方便。但是,由于 Electron 会随着 Node.jsChromium 的发布而保持更新,因此您还可以利用它们附带的强大功能。在某些情况下,这消除了您之前可能需要包含在 Web 应用中的依赖项。


有很多功能,我们将在此处介绍一些示例,但如果您有兴趣了解所有功能,您可以关注 Google Chromium 博客Node.js 变更日志。您可以在 electronjs.org/#electron-versions 上查看 Electron 使用的 Node.js、Chromium 和 V8 版本。

通过 V8 支持 ES6

Electron 将 Chromium 的渲染库与 Node.js 结合使用。这两个库共享同一个 JavaScript 引擎,即 V8。许多 ECMAScript 2015 (ES6) 功能已内置于 V8 中,这意味着您可以在 Electron 应用程序中使用它们,而无需任何编译器。

下面是一些示例,但您还可以获得类(在严格模式下)、块级作用域、Promise、类型化数组等等。请查看 此列表,以获取有关 V8 中 ES6 功能的更多信息。

箭头函数

findTime () => {
console.log(new Date())
}

字符串插值

var octocat = 'Mona Lisa';
console.log(`The octocat's name is ${octocat}`);

新目标

Octocat() => {
if (!new.target) throw "Not new";
console.log("New Octocat");
}

// Throws
Octocat();
// Logs
new Octocat();

数组 Includes

// Returns true
[1, 2].includes(2);

剩余参数

// Represent indefinite number of arguments as an array
(o, c, ...args) => {
console.log(args.length);
};

Chromium 功能

感谢 Google 和贡献者为 Chromium 做出的辛勤工作,在构建 Electron 应用时,您还可以使用一些很酷的功能(但不限于)

关注 Google Chromium 博客 以了解新版本发布的功能,同样,您可以在 此处 检查 Electron 使用的 Chromium 版本。

您对什么感到兴奋?

在 Twitter 上告诉我们 @ElectronJS 您最喜欢的内置于 V8 或 Chromium 中的功能。