跳转到主要内容

Electron 用户社区

·阅读时长 4 分钟

我们在 Electron 网站上新增了一个 用户区(userland)部分,旨在帮助用户发现构成我们蓬勃发展的开源生态系统的开发者、软件包和应用程序。


github-contributors

用户区的起源

用户空间(Userland)是软件社区成员汇聚一堂分享工具和想法的地方。这个词起源于 Unix 社区,当时指的是任何在内核之外运行的程序,但如今它有了更广泛的含义。当当今的 JavaScript 社区提到用户空间时,他们通常指的是 npm 包注册表。这就是大部分实验和创新发生的地方,而 Node 和 JavaScript 语言(就像 Unix 内核一样)则保留了一套相对小而稳定的核心功能。

Node 和 Electron

与 Node 类似,Electron 也有一个小的核心 API 集。它们提供了开发跨平台桌面应用程序所需的基本功能。这种设计理念使得 Electron 能够保持作为一个灵活的工具,而不必对如何使用它做出过度规定。

用户区是“核心”的对应部分,使用户能够创建和共享扩展 Electron 功能的工具。

数据收集

为了更好地了解我们生态系统的趋势,我们分析了 15,000 个依赖于 `electron` 或 `electron-prebuilt` 的公共 GitHub 存储库的元数据。

我们使用了 GitHub APIlibraries.io API 和 npm 注册表来收集关于依赖项、开发依赖项、依赖者、包作者、仓库贡献者、下载量、fork 数、star 数等信息。

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

过滤结果

应用依赖项星标应用 这样的报告,其中列出了包、应用和仓库,都有一个文本输入框,可以用来过滤结果。

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

babel

更多内容敬请期待

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

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

如果您对如何改进这些报告有任何想法,请通过 在网站仓库中开启一个 issue 或上述任何一个仓库提出,让我们知道。

感谢您,Electron 社区,成就了今天的用户区!

证书透明度修复

·3 分钟阅读

Electron 1.4.12 包含了一个重要的补丁,修复了 Chrome 的一个上游问题:某些 Symantec、GeoTrust 和 Thawte SSL/TLS 证书将在构建时间后 10 周内被错误地拒绝,这是 Electron 底层 Chrome 库 libchromiumcontent 的一个问题。受影响网站使用的证书没有问题,更换这些证书也无济于事。


在 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 中引入的,因此 Electron 1.4.0 之前的版本不受影响。

影响日期

下表列出了每个 Electron 1.4 版本以及使用受影响证书的网站请求开始失败的日期。

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

您可以通过将计算机的时钟拨快,然后检查 https://symbeta.symantec.com/welcome/ 是否能成功加载来验证您的应用是否受影响。

更多信息

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

2016 年 9 月:新应用

·阅读时长 4 分钟

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


本网站通过社区的 pull requests 来更新新的 应用聚会。您可以 关注该仓库 来接收新添加的通知,或者如果您不关心网站的所有更改,可以订阅 博客 RSS 源

如果您制作了Electron应用程序或举办了会议,请提交拉取请求将其添加到网站,它将包含在下一个汇总中。

新讲座

9月份,GitHub举办了其GitHub Universe大会,该大会被宣传为面向构建软件未来的活动。该活动中有几个有趣的Electron讲座。

另外,如果您在12月5日在巴黎,Zeke将在dotJS 2016大会上做一个Electron讲座

新应用

Pexels搜索完全免费的照片并将其复制到剪贴板
Timestamp更好的macOS菜单栏时钟,具有可自定义的日期/时间显示和日历
Harmony兼容Spotify、Soundcloud、Play Music和本地文件的音乐播放器
uPhoneWebRTC桌面电话
SealTalk由融云IM云服务和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 总结了选择此方法的原因:

采用标准风格意味着将代码清晰度和社区约定放在比个人风格更重要的位置。这可能不适用于 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 会将该对象存储在一个映射表中并为其分配一个 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];
});

具有弱值的映射

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

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

例如,以下代码

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

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

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

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

使用 JavaScript 核心中的 API 无法实现这一点。使用普通映射表缓存对象会阻止 V8 垃圾回收这些对象,而 WeakMap 类只能将对象用作弱键。

为了解决这个问题,添加了一种具有弱值作为引用的映射类型,这非常适合缓存带有 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 分钟阅读

以下是8月份添加到网站上的新 Electron 应用。


本网站通过社区的 pull requests 来更新新的 应用聚会。您可以 关注该仓库 来接收新添加的通知,或者如果您不关心网站的所有更改,可以订阅 博客 RSS 源

如果您制作了Electron应用程序或举办了会议,请提交拉取请求将其添加到网站,它将包含在下一个汇总中。

新应用

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

无障碍工具

·阅读时间 2 分钟

制作可访问性应用程序很重要,我们很高兴在 DevtronSpectron 中引入新功能,让开发者有机会让他们开发的应用程序对所有人更好。


Electron 应用程序的可访问性问题与网站类似,因为它们最终都是 HTML。但是,对于 Electron 应用,您无法使用在线资源进行可访问性审计,因为您的应用没有 URL 可以指向审计工具。

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

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

这是因为 npm 上存在一个现有的 electron 项目,该项目在 GitHub 的 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 中,Node 被链接为一个共享库,方法是将 GYP 变量 node_shared 设置为 true,这样 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.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 社区的活动。每次汇总将展示新应用、即将举行的聚会、工具、视频等内容。


本网站通过社区的 pull requests 来更新新的 应用聚会。您可以 关注该仓库 来接收新添加的通知,或者如果您不关心网站的所有更改,可以订阅 博客 RSS 源

如果您制作了Electron应用程序或举办了会议,请提交拉取请求将其添加到网站,它将包含在下一个汇总中。

新应用

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

新聚会

Electron 开源桌面框架英国伦敦