Node-Webkit vs Electron [关闭]


80

我们计划构建跨平台的桌面应用程序。我们发现Node-Webkit是我们的理想选择。但是GitHub开发了自己的名为Electron的框架,而不是使用Node-Webkit。

它们之间有什么区别?


2
电子N W.js(17年4月)。Stackoverflow问题E:2,630 vs N:269,Github拉取请求E:102 vs N:6,基于Electron vs NW.js以及Google趋势构建的应用程序-Electron似乎是更好的选择。
kinjelom '17

我选择了“ nw.js”,因为我可以将其指向“ index.html”,并且它可以正常工作。使用“ nw.js”时,我感觉我正在为添加了“ node.js”的浏览器进行编程,而不是通过“ Electron”的最高级方法将浏览器固定在“ node.js”上,我认为这是更好的范例和方法。
Daniel Sokolowski

Answers:


78

Electron的页面解释了node-webkit的不同之处:

https://github.com/atom/electron/blob/master/docs/development/atom-shell-vs-node-webkit.md

与Node-Webkit一样,Electron提供了一个使用JavaScript和HTML编写桌面应用程序的平台,并具有Node集成功能,以授予对网页中低级系统的访问权限。

但是,这两个项目之间也存在根本差异,这使Electron成为与Node-Webkit完全独立的产品:

1-申请表

在NW.js中,应用程序的主要入口点是网页或JS脚本。您可以在package.json中指定一个html或js文件,并在浏览器窗口中将其打开为应用程序的主窗口(如果是html入口点)或执行脚本。

在Electron中,入口点是JavaScript脚本,而不是直接提供URL,而是需要手动创建浏览器窗口并使用相应的API在其中加载html文件。您还需要监听窗口事件以决定何时退出应用程序。

因此,Electron的工作方式更像Node.js运行时,而API则更底层,您也可以将Electron用作phantomjs,

2-构建系统

为了避免构建整个Chromium的复杂性,Electron使用libchromiumcontent访问Chromium的Content API,libchromiumcontent是一个包含Chromium Content模块及其所有依赖项的共享库。因此,用户不需要强大的机器来构建原子外壳。

3-节点整合

在Node-Webkit中,网页中的Node集成需要修补Chromium才能起作用,而在Electron中,我们选择了一种不同的方式将libuv循环集成到每个平台的消息循环中,以避免对Chromium造成黑客入侵,有关如何操作,请参见node_bindings代码。

4-多上下文

如果您是经验丰富的Node-Webkit用户,则应该熟悉Node上下文和Web上下文的概念,这些概念是由于Node-Webkit的实现方式而发明的。

通过使用Node的多上下文功能,Electron不会在网页中引入新的JavaScript上下文。

源代码保护

Electron正在使用asar打包其应用程序,其中包含应用程序的不受保护的源代码。这使应用程序1可以提取应用程序2并注入易受攻击的脚本,而无需用户知道。您可以在GitHub上签出该项目,以查看有关如何操作Slack应用程序的示例。到目前为止,Electron团队还没有任何计划实现对源代码保护的支持

NW.js已经内置支持编译源代码保护的二进制文件


3
现在,node-webkit重命名为NW
Marwen Trabelsi

68
由于本文来自Electron的回购,因此这可能会稍微偏向Electron。
gbmhunter

7
nw.js可以开箱即用地运行Chrome应用。对于许多程序员来说,这很有价值,他们的Chrome Webstore应用很快将被孤立。
marlar

16
实际上,我最近尝试同时使用这两种方法,并为此写了一篇博客文章。我发现nw.js实际上比Electron更简单易用。只需获取一些网页并将其放入nw.js即可进行,这相当容易。Electron设置起来比较麻烦,而且它们的多进程设计意味着您必须跳圈甚至做直接的事情。Electron具有很多得多的平台集成API,使您可以在应用程序中更广泛地使用本机Mac / Windows / Linux功能。
明逸(Ying-Yee Iu)

3
我还发现首先使用Node.js添加NW.js的浏览器比使用Electron的Node.js的方法更简洁,更容易使用,而浏览器的支持则排在最前面。使用NW.js,我为浏览器编码,使用Electron,我为Node.js编码。
Daniel Sokolowski
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.