跳到主要内容

Electron Userland

·4 分钟阅读

我们已在 Electron 网站上添加了一个新的 userland 部分,以帮助用户发现构成我们蓬勃发展的开源生态系统的人员、包和应用程序。


github-contributors

Userland 的起源

Userland 是软件社区中的人们聚集在一起分享工具和想法的地方。该术语起源于 Unix 社区,当时它指的是在内核之外运行的任何程序,但今天它意味着更多。当今 Javascript 社区中的人们提到 userland 时,他们通常在谈论 npm 包注册表。这是大部分实验和创新发生的地方,而 Node 和 JavaScript 语言(如 Unix 内核)则保留了一组相对较小且稳定的核心功能。

Node 和 Electron

与 Node 一样,Electron 具有一小部分核心 API。这些 API 提供了开发多平台桌面应用程序所需的基本功能。这种设计理念使 Electron 能够保持灵活的工具,而不会过度规定其应如何使用。

Userland 是 “core” 的对应物,使用户能够创建和共享扩展 Electron 功能的工具。

收集数据

为了更好地了解我们生态系统的趋势,我们分析了来自 15,000 个公共 GitHub 存储库的元数据,这些存储库依赖于 electronelectron-prebuilt

我们使用了 GitHub APIlibraries.io API 和 npm 注册表来收集有关依赖项、开发依赖项、依赖项、包作者、存储库贡献者、下载计数、fork 计数、stargazer 计数等的信息。

然后,我们使用这些数据生成以下报告

过滤结果

应用程序依赖项加星标的应用程序 这样的报告(列出包、应用程序和存储库)具有一个文本输入,可用于过滤结果。

当您在此输入框中键入时,页面的 URL 会动态更新。这使您可以复制代表 userland 数据的特定切片的 URL,然后与他人共享。

babel

更多内容即将推出

这第一组报告仅仅是个开始。我们将继续收集有关社区如何构建 Electron 的数据,并将向网站添加新报告。

用于收集和显示此数据的所有工具都是开源的

如果您对如何改进这些报告有任何想法,请通过在网站存储库上提出问题或任何上述存储库来告诉我们。

感谢您,Electron 社区,让 userland 成为今天的样子!

证书透明度修复

·3 分钟阅读

Electron 1.4.12 包含一个重要的补丁,该补丁修复了一个上游 Chrome 问题,其中某些 Symantec、GeoTrust 和 Thawte SSL/TLS 证书在 libchromiumcontent(Electron 的底层 Chrome 库)的构建时间后的 10 周内被错误地拒绝。受影响的站点上使用的证书没有问题,更换这些证书也不会有所帮助。


在 Electron 1.4.0 — 1.4.11 中,在某个日期之后,使用这些受影响证书的站点发出的 HTTPS 请求将因网络错误而失败。这会影响使用 Chrome 的底层网络 API 发出的 HTTPS 请求,例如 window.fetch、Ajax 请求、Electron 的 net API、BrowserWindow.loadURLwebContents.loadURL<webview> 标记上的 src 属性等。

将您的应用程序升级到 1.4.12 将防止这些请求失败发生。

注意:此问题是在 Chrome 53 中引入的,因此早于 1.4.0 的 Electron 版本不受影响。

影响日期

下面是每个 Electron 1.4 版本以及使用这些受影响证书的站点发出的请求将开始失败的日期的表格。

Electron 版本影响日期
1.3.x不受影响
1.4.0已经失败
1.4.1已经失败
1.4.2已经失败
1.4.32016 年 12 月 11 日下午 1:00 UTC
1.4.42016 年 12 月 11 日下午 1:00 UTC
1.4.52016 年 12 月 11 日下午 1:00 UTC
1.4.62017 年 1 月 15 日下午 1:00 UTC
1.4.72017 年 1 月 15 日下午 1:00 UTC
1.4.82017 年 1 月 15 日下午 1:00 UTC
1.4.92017 年 1 月 15 日下午 1:00 UTC
1.4.102017 年 1 月 15 日下午 1:00 UTC
1.4.112017 年 2 月 12 日下午 1:00 UTC
1.4.12不受影响

您可以通过将计算机的时钟提前,然后检查是否可以从 https://symbeta.symantec.com/welcome/ 成功加载,来验证应用程序的影响日期。

更多信息

您可以在以下位置阅读有关此主题、原始问题和修复的更多信息

2016 年 9 月:新应用程序

·4 分钟阅读

以下是 9 月份添加到该网站的新 Electron 应用程序和演讲。


此站点通过来自社区的 拉取请求 更新了新的 应用程序聚会。您可以 监视存储库 以获取新添加内容的通知,或者如果您对站点的所有更改不感兴趣,请订阅 博客 RSS 源

如果您制作了一个 Electron 应用程序或举办了一个聚会,请创建一个 拉取请求 以将其添加到该站点,它将进入下一个综述。

新演讲

9 月,GitHub 举办了 GitHub Universe 会议,该会议被称为为软件的未来而构建的人们的盛会。该活动中有几个有趣的 Electron 演讲。

此外,如果您正好在 12 月 5 日在巴黎,Zeke 将在 dotJS 2016 上发表 Electron 演讲

新应用程序

Pexels搜索完全免费的照片并将其复制到您的剪贴板中
Timestamp一个更好的 macOS 菜单栏时钟,具有可自定义的日期/时间显示和一个日历
Harmony与 Spotify、Soundcloud、Play Music 和您的本地文件兼容的音乐播放器
uPhoneWebRTC 桌面电话
SealTalk由 RongCloud IM Cloud Service 和 IM SDK 提供支持的即时消息应用程序
Infinity制作演示文稿的简便方法
Cycligent Git Tool用于您的 Git 项目的简单、图形化的 GUI
Foco使用 Foco 保持专注并提高工作效率
Strawberry赢得终身用餐者,并通过一体化餐厅软件套件更好地了解和服务他们。
Mixmax实时查看您的电子邮件上的每一个操作。随时随地撰写。
Firebase AdminFirebase 数据管理工具
ANote一个简单友好的 Markdown 笔记
Temps一个简单但智能的菜单栏天气应用程序
Amium一种工作协作产品,可将对话带到您的文件中
Soube简单的音乐播放器
(Un)colored下一代桌面富内容编辑器,可使用主题 HTML 和 Markdown 兼容保存文档。适用于 Windows、OS X 和 Linux。
quickcalc菜单栏计算器
Forestpin Analytics适用于企业的财务数据分析工具
LingREST 客户端
Shortexts快捷方式,用于您经常复制的文本、文件夹和表情符号
Front-End Box一组前端代码生成器

Electron 的 API 文档作为结构化数据

·4 分钟阅读

今天,我们宣布对 Electron 的文档进行一些改进。每个新版本现在都包含一个 JSON 文件,该文件详细描述了 Electron 的所有公共 API。我们创建此文件是为了使开发人员能够以有趣的新方式使用 Electron 的 API 文档。


架构概述

每个 API 都是一个对象,具有 name、description、type 等属性。诸如 BrowserWindowMenu 之类的类具有描述其实例方法、实例属性、实例事件等的其他属性。

以下是描述 BrowserWindow 类的架构摘录

{
name: 'BrowserWindow',
description: 'Create and control browser windows.',
process: {
main: true,
renderer: false
},
type: 'Class',
instanceName: 'win',
slug: 'browser-window',
websiteUrl: 'https://electron.js.cn/docs/api/browser-window',
repoUrl: 'https://github.com/electron/electron/blob/v1.4.0/docs/api/browser-window.md',
staticMethods: [...],
instanceMethods: [...],
instanceProperties: [...],
instanceEvents: [...]
}

以下是一个方法描述示例,在本例中为 apis.BrowserWindow.instanceMethods.setMaximumSize 实例方法

{
name: 'setMaximumSize',
signature: '(width, height)',
description: 'Sets the maximum size of window to width and height.',
parameters: [{
name: 'width',
type: 'Integer'
}, {
name: 'height',
type: 'Integer'
}]
}

使用新数据

为了使开发人员可以轻松地在其项目中使用此结构化数据,我们创建了 electron-docs-api,这是一个小的 npm 包,每当有新的 Electron 版本时,它都会自动发布。

npm install electron-api-docs --save

为了获得即时满足感,请在您的 Node.js REPL 中试用该模块

npm i -g trymodule && trymodule electron-api-docs=apis

如何收集数据

Electron 的 API 文档遵循 Electron 编码风格Electron 风格指南,因此可以对其内容进行编程解析。

electron-docs-linterelectron/electron 存储库的一个新的开发依赖项。它是一个命令行工具,可以检查所有 markdown 文件并强制执行风格指南的规则。如果发现错误,将列出它们并停止发布过程。如果 API 文档有效,则 electron-json.api 文件将被创建并作为 Electron 版本的一部分上传到 GitHub

标准 Javascript 和标准 Markdown

今年早些时候,Electron 的代码库已更新为对所有 JavaScript 使用 standard linter。 Standard 的 README 总结了选择它的原因

采用 standard 风格意味着代码清晰度和社区约定比个人风格更重要。这对于 100% 的项目和开发文化来说可能没有意义,但对于新手来说,开源可能是一个充满敌意的地方。建立清晰、自动化的贡献者期望使项目更健康。

我们最近还创建了 standard-markdown 来验证我们文档中的所有 JavaScript 代码片段都是有效的,并且与代码库本身的风格一致。

这些工具一起帮助我们使用持续集成 (CI) 自动查找 pull request 中的错误。这减轻了人工代码审查的负担,并使我们对文档的准确性更有信心。

社区贡献

Electron 的文档不断改进,我们要感谢我们出色的开源社区。截至本文撰写之时,已有近 300 人为文档做出了贡献。

我们很高兴看到人们如何使用这些新的结构化数据。可能的用途包括

Electron 内部原理:弱引用

·6 分钟阅读

作为一种具有垃圾回收机制的语言,JavaScript 使用户无需手动管理资源。但是由于 Electron 托管了此环境,因此必须非常小心地避免内存和资源泄漏。

这篇文章介绍了弱引用的概念以及它们如何在 Electron 中用于管理资源。


弱引用

在 JavaScript 中,每当您将对象分配给变量时,您都在向该对象添加引用。只要存在对该对象的引用,它将始终保存在内存中。一旦对该对象的所有引用都消失了,即不再有存储该对象的变量,JavaScript 引擎将在下一次垃圾回收时收回内存。

弱引用是对对象的引用,允许您获取对象而不影响它是否会被垃圾回收。您还会在对象被垃圾回收时收到通知。这样就可以使用 JavaScript 管理资源。

以 Electron 中的 NativeImage 类为例,每次调用 nativeImage.create() API 时,都会返回一个 NativeImage 实例,并且它会将图像数据存储在 C++ 中。一旦你完成了这个实例,并且 JavaScript 引擎 (V8) 已经垃圾回收了这个对象,C++ 中的代码将被调用来释放内存中的图像数据,因此用户无需手动管理它。

另一个例子是 窗口消失问题,它直观地显示了当对窗口的所有引用都消失时,窗口是如何被垃圾回收的。

在 Electron 中测试弱引用

由于该语言没有分配弱引用的方法,因此无法在原始 JavaScript 中直接测试弱引用。JavaScript 中与弱引用相关的唯一 API 是 WeakMap,但由于它只创建弱引用键,因此无法知道对象何时被垃圾回收。

在 v0.37.8 之前的 Electron 版本中,您可以使用内部 v8Util.setDestructor API 来测试弱引用,该 API 会向传递的对象添加弱引用,并在对象被垃圾回收时调用回调

// Code below can only run on Electron < v0.37.8.
var v8Util = process.atomBinding('v8_util');

var object = {};
v8Util.setDestructor(object, function () {
console.log('The object is garbage collected');
});

// Remove all references to the object.
object = undefined;
// Manually starts a GC.
gc();
// Console prints "The object is garbage collected".

请注意,您必须使用 --js-flags="--expose_gc" 命令开关启动 Electron 才能公开内部 gc 函数。

该 API 在以后的版本中被删除,因为 V8 实际上不允许在析构函数中运行 JavaScript 代码,并且在以后的版本中这样做会导致随机崩溃。

remote 模块中的弱引用

除了用 C++ 管理原生资源外,Electron 还需要弱引用来管理 JavaScript 资源。一个例子是 Electron 的 remote 模块,它是一个 远程过程调用 (RPC) 模块,允许从渲染器进程中使用主进程中的对象。

remote 模块的一个主要挑战是避免内存泄漏。当用户在渲染器进程中获取远程对象时,remote 模块必须保证该对象在主进程中继续存在,直到渲染器进程中的引用消失。此外,它还必须确保当渲染器进程中不再有任何对其的引用时,该对象可以被垃圾回收。

例如,如果没有正确的实现,以下代码将很快导致内存泄漏

const { remote } = require('electron');

for (let i = 0; i < 10000; ++i) {
remote.nativeImage.createEmpty();
}

remote 模块中的资源管理很简单。每当请求一个对象时,都会向主进程发送一条消息,Electron 会将该对象存储在一个 map 中并为其分配一个 ID,然后将该 ID 发送回渲染器进程。在渲染器进程中,remote 模块将接收该 ID 并用代理对象包装它,当代理对象被垃圾回收时,将向主进程发送一条消息以释放该对象。

remote.require API 为例,一个简化的实现如下所示

remote.require = function (name) {
// Tell the main process to return the metadata of the module.
const meta = ipcRenderer.sendSync('REQUIRE', name);
// Create a proxy object.
const object = metaToValue(meta);
// Tell the main process to free the object when the proxy object is garbage
// collected.
v8Util.setDestructor(object, function () {
ipcRenderer.send('FREE', meta.id);
});
return object;
};

在主进程中

const map = {};
const id = 0;

ipcMain.on('REQUIRE', function (event, name) {
const object = require(name);
// Add a reference to the object.
map[++id] = object;
// Convert the object to metadata.
event.returnValue = valueToMeta(id, object);
});

ipcMain.on('FREE', function (event, id) {
delete map[id];
});

具有弱值的 Maps

使用之前的简单实现,remote 模块中的每次调用都会从主进程返回一个新的远程对象,并且每个远程对象都代表对主进程中对象的引用。

这个设计本身没有问题,但是问题是当有多个调用来接收同一个对象时,会创建多个代理对象,对于复杂的对象,这会给内存使用和垃圾回收带来巨大的压力。

例如,以下代码

const { remote } = require('electron');

for (let i = 0; i < 10000; ++i) {
remote.getCurrentWindow();
}

它首先使用大量内存创建代理对象,然后占用 CPU(中央处理器)来垃圾回收它们并发送 IPC 消息。

一个显而易见的优化是缓存远程对象:当已经存在具有相同 ID 的远程对象时,将返回之前的远程对象而不是创建一个新的。

这对于 JavaScript 核心中的 API 来说是不可能的。使用普通的 map 缓存对象会阻止 V8 垃圾回收对象,而 WeakMap 类只能使用对象作为弱键。

为了解决这个问题,添加了一种以值作为弱引用的 map 类型,这非常适合用 ID 缓存对象。现在 remote.require 看起来像这样

const remoteObjectCache = v8Util.createIDWeakMap()

remote.require = function (name) {
// Tell the main process to return the meta data of the module.
...
if (remoteObjectCache.has(meta.id))
return remoteObjectCache.get(meta.id)
// Create a proxy object.
...
remoteObjectCache.set(meta.id, object)
return object
}

请注意,remoteObjectCache 将对象存储为弱引用,因此当对象被垃圾回收时,无需删除该键。

原生代码

对于对 Electron 中弱引用的 C++ 代码感兴趣的人,可以在以下文件中找到它

setDestructor API

createIDWeakMap API

2016 年 8 月:新应用程序

·3 分钟阅读

这是八月份添加到网站上的新 Electron 应用。


该网站通过社区的 pull requests 更新新的 appsmeetups。您可以关注该仓库以获取新添加的通知,或者如果您对网站的所有更改不感兴趣,请订阅 blog RSS feed

如果您制作了一个 Electron 应用程序或举办了一个聚会,请创建一个 拉取请求 以将其添加到该站点,它将进入下一个综述。

新应用程序

Code RPGifyRPG 风格的编码应用
PamFax用于发送和接收传真的跨平台应用
BlankUp清晰度 +1 的 Markdown 编辑器
Rambox免费开源的消息传递和电子邮件应用,将常见的 Web 应用组合成一个
Gordie适用于您的卡片收藏的最佳应用
Ionic Creator更快地构建令人惊叹的移动应用
TwitchAlerts通过漂亮的警报和通知让您的观众满意
Museeks一个简单、干净且跨平台的音乐播放器
SeaPig一个从 markdown 转换为 html 的转换器
GroupMe非官方的 GroupMe 应用
Moeditor您的多用途 markdown 编辑器
SoundnodeSoundnode App 是桌面的 Soundcloud
QMUI WebQMUI Web Desktop 是一款用于管理基于 QMUI Web Framework 的项目的应用程序
Svgsus组织、清理和转换您的 SVG
Ramme非官方的 Instagram 桌面应用
InsomniaREST API 客户端
Correo适用于 Windows、macOS 和 Linux 的 menubar/任务栏 Gmail 应用
KongDashKong Admin API 的桌面客户端
翻译编辑器适用于 INTL ICU 消息(请参阅 formatjsio)的翻译文件编辑器
5EClient5EPlay CSGO 客户端
Theme Juice轻松进行本地 WordPress 开发

辅助功能工具

·2 分钟阅读

制作可访问的应用程序非常重要,我们很高兴为 DevtronSpectron 引入新功能,让开发者有机会为每个人更好地制作他们的应用程序。


Electron 应用程序中的可访问性问题与网站中的问题类似,因为它们最终都是 HTML。但是,对于 Electron 应用程序,您不能使用在线资源进行可访问性审核,因为您的应用程序没有 URL 可供审核员指向。

这些新功能将这些审核工具带到您的 Electron 应用程序中。您可以选择使用 Spectron 将审核添加到您的测试中,或者在 DevTools 中使用 Devtron。请继续阅读以了解工具的摘要,或查看我们的 可访问性文档 以获取更多信息。

Spectron

在测试框架 Spectron 中,您现在可以审核应用程序中的每个窗口和 <webview> 标签。例如

app.client.auditAccessibility().then(function (audit) {
if (audit.failed) {
console.error(audit.message);
}
});

您可以在 Spectron 的文档 中阅读有关此功能的更多信息。

Devtron

在 Devtron 中,有一个新的可访问性选项卡,允许您审核应用程序中的页面,对结果进行排序和过滤。

devtron screenshot

这两种工具都使用 Google 为 Chrome 构建的 Accessibility Developer Tools 库。您可以在该 仓库的 wiki 上了解有关此库使用的可访问性审核规则的更多信息。

如果您知道其他适用于 Electron 的优秀可访问性工具,请通过 pull request 将它们添加到 可访问性文档 中。

npm install electron

·3 分钟阅读

从 Electron 1.3.1 版本开始,您可以 npm install electron --save-dev 以在您的应用程序中安装 Electron 的最新预编译版本。


npm install electron

预构建的 Electron 二进制文件

如果您以前使用过 Electron 应用程序,您可能遇到过 electron-prebuilt npm 包。这个包几乎是每个 Electron 项目不可或缺的一部分。安装后,它会检测您的操作系统并下载一个预构建的二进制文件,该文件经过编译可以在您系统的架构上运行。

新名称

Electron 安装过程通常是新开发人员的绊脚石。许多勇敢的人试图通过运行 npm install electron 而不是 npm install electron-prebuilt 来开始开发 Electron 应用程序,但他们却发现(通常是在经过许多困惑之后)它不是他们正在寻找的 electron

这是因为在 GitHub 的 Electron 项目存在之前,npm 上已经存在一个 electron 项目。为了帮助新开发人员更容易和更直观地进行 Electron 开发,我们联系了现有 electron npm 包的所有者,询问他是否愿意让我们使用该名称。幸运的是,他是我们项目的粉丝,并同意帮助我们重新使用该名称。

Prebuilt 继续存在

从 1.3.1 版本开始,我们已经开始同时向 npm 发布 electronelectron-prebuilt 包。这两个包是相同的。我们选择在一段时间内继续使用这两个名称发布该包,以免给目前在其项目中使用 electron-prebuilt 的数千名开发人员带来不便。我们建议更新您的 package.json 文件以使用新的 electron 依赖项,但我们将继续发布 electron-prebuilt 的新版本直到 2016 年底。

electron-userland/electron-prebuilt 仓库将仍然是 electron npm 包的规范主页。

非常感谢

我们要特别感谢 @mafintosh@maxogden 和许多其他 贡献者 创建和维护 electron-prebuilt,以及他们对 JavaScript、Node.js 和 Electron 社区的不懈服务。

并感谢 @logicalparadox 允许我们接管 npm 上的 electron 包。

更新您的项目

我们与社区合作更新了受此更改影响的流行包。像 electron-packagerelectron-rebuildelectron-builder 这样的包已经更新,可以在继续支持旧名称的同时使用新名称。

如果您在安装此新包时遇到任何问题,请在 electron-userland/electron-prebuilt 仓库上打开一个 issue 告诉我们。

对于 Electron 的任何其他问题,请使用 electron/electron 仓库。

Electron 内部原理:使用 Node 作为库

·5 分钟阅读

这是正在进行中的一系列解释 Electron 内部原理的第二篇文章。如果您还没有阅读,请查看关于事件循环集成的 第一篇文章

大多数人使用 Node 用于服务器端应用程序,但由于 Node 丰富的 API 集和蓬勃发展的社区,它也非常适合作为嵌入式库。这篇文章解释了 Node 如何在 Electron 中用作库。


构建系统

Node 和 Electron 都使用 GYP 作为其构建系统。如果想将 Node 嵌入到您的应用程序中,您也必须使用它作为您的构建系统。

不熟悉 GYP?在继续阅读这篇文章之前,请阅读 本指南

Node 的标志

Node 源代码目录中的 node.gyp 文件描述了 Node 的构建方式,以及许多 GYP 变量,用于控制启用 Node 的哪些部分以及是否打开某些配置。

要更改构建标志,您需要在项目的 .gypi 文件中设置变量。Node 中的 configure 脚本可以为您生成一些常见的配置,例如运行 ./configure --shared 将生成一个 config.gypi,其中包含指示 Node 构建为共享库的变量。

Electron 不使用 configure 脚本,因为它有自己的构建脚本。Node 的配置在 Electron 根源代码目录中的 common.gypi 文件中定义。

在 Electron 中,通过将 GYP 变量 node_shared 设置为 true 将 Node 作为共享库链接,因此 Node 的构建类型将从 executable 更改为 shared_library,并且包含 Node 的 main 入口点的源代码将不会被编译。

由于 Electron 使用 Chromium 附带的 V8 库,因此不使用 Node 源代码中包含的 V8 库。这是通过将 node_use_v8_platformnode_use_bundled_v8 都设置为 false 来完成的。

共享库还是静态库

在与 Node 链接时,有两种选择:您可以将 Node 构建为静态库并将其包含在最终可执行文件中,或者您可以将其构建为共享库并将其与最终可执行文件一起发布。

在 Electron 中,Node 长期以来一直被构建为静态库。这使得构建变得简单,能够实现最佳的编译器优化,并允许 Electron 在没有额外的 node.dll 文件的情况下分发。

然而,在 Chrome 切换到使用 BoringSSL 之后,这种情况发生了变化。BoringSSL 是 OpenSSL 的一个分支,它删除了几个未使用的 API 并更改了许多现有的接口。由于 Node 仍然使用 OpenSSL,因此如果它们链接在一起,编译器会生成大量由于符号冲突导致的链接错误。

Electron 无法在 Node 中使用 BoringSSL,也无法在 Chromium 中使用 OpenSSL,因此唯一的选择是切换到将 Node 构建为共享库,并在每个组件中 隐藏 BoringSSL 和 OpenSSL 符号

这个改变给 Electron 带来了一些积极的副作用。在此更改之前,如果您使用本机模块,则无法在 Windows 上重命名 Electron 的可执行文件,因为可执行文件的名称已硬编码在导入库中。在将 Node 构建为共享库之后,这个限制就消失了,因为所有本机模块都链接到 node.dll,其名称不需要更改。

支持本机模块

Node 中的 本机模块 的工作原理是为 Node 定义一个入口函数来加载,然后从 Node 中搜索 V8 和 libuv 的符号。对于嵌入器来说,这有点麻烦,因为默认情况下,当将 Node 构建为库时,V8 和 libuv 的符号是隐藏的,并且本机模块将无法加载,因为它们无法找到符号。

因此,为了使本机模块工作,V8 和 libuv 符号在 Electron 中公开。对于 V8,这是通过 强制 Chromium 的配置文件中的所有符号都公开 来完成的。对于 libuv,这是通过 设置 BUILDING_UV_SHARED=1 定义 来实现的。

在您的应用程序中启动 Node

在完成所有构建和链接 Node 的工作之后,最后一步是在您的应用程序中运行 Node。

Node 没有提供许多用于将其自身嵌入到其他应用程序中的公共 API。通常,您可以只调用 node::Startnode::Init 来启动一个新的 Node 实例。但是,如果您正在构建一个基于 Node 的复杂应用程序,则必须使用像 node::CreateEnvironment 这样的 API 来精确控制每个步骤。

在 Electron 中,Node 以两种模式启动:在主进程中运行的独立模式,类似于官方 Node 二进制文件,以及将 Node API 插入到网页中的嵌入模式。这方面的细节将在以后的文章中解释。

2016 年 7 月:新应用程序和聚会

·2 分钟阅读

我们正在启动一个每月综述,以突出 Electron 社区的活动。每个综述将包含诸如新应用程序、即将举行的聚会、工具、视频等内容。


此站点通过来自社区的 拉取请求 更新了新的 应用程序聚会。您可以 监视存储库 以获取新添加内容的通知,或者如果您对站点的所有更改不感兴趣,请订阅 博客 RSS 源

如果您制作了一个 Electron 应用程序或举办了一个聚会,请创建一个 拉取请求 以将其添加到该站点,它将进入下一个综述。

新应用程序

Demio一个为入站销售和营销构建的 Webinar 平台
ElectorrentuTorrent 服务器的远程客户端应用程序
PhoneGap使用 Web 技术构建令人惊叹的移动应用程序的开源框架
WordMark一个轻量级的博客发布编辑器,适用于 Markdown 作者
UbAuth帮助开发人员使用 OAuth 2.0 为 Uber 应用程序创建访问令牌的应用程序
HyperTermHTML/JS/CSS 终端
MarpMarkdown 演示文稿编写器
Glyphr Studio一个免费的、基于 Web 的字体设计器,专注于为业余爱好者设计的字体
BitCrypt一个简单的 Windows 文件加密应用程序加密您的位
Trym适用于 macOS 的漂亮的小型应用程序,可帮助您查看、优化和转换 SVG 图标
Booker具有 Markdown 功能的文本编辑器
PhonePresenter最智能的演示文稿点击器
Yout在桌面上观看 YouTube 播放列表的新方式

新的聚会

Electron 开源桌面框架英国伦敦