NW.js、Brackets-Shell和Electron之间的功能差异是什么?

153
现在TideSDK已经基本死亡,我一直在寻找替代的“包装器”来运行HTML/CSS/JS应用程序作为独立的桌面应用程序。到目前为止,我遇到的三个可行选项是NW.js(原名node-webkit)、brackets-shellElectron(原名atom-shell)。
问题在于,似乎没有足够完整的比较这三者在功能集、兼容性等方面的差异。我希望将此转化为一个更或多或少的规范线程,讨论这三种解决方案之间的(客观)差异,特别是关于以下方面:
  • 平台支持:操作系统、依赖项等。
  • 语言特性支持,就HTML5、CSS3和JavaScript而言。考虑一些问题,例如“HTML5视频是否可用,如果是,有哪些编解码器可用?”
  • 非标准额外功能,例如托盘图标、弹出式通知和操作系统渲染的菜单栏。
  • 可扩展性;例如能否“插入”本地代码、与Node.js通信等。
  • 架构;特别是影响开发人员日常使用的架构差异。
  • 调试;包括开发工具、与常用工具如node-inspector的兼容性等。
  • ……等等。

作为应用程序开发人员,在选择它们时,有哪些客观的技术差异是需要考虑的?


3
这是atom-shell团队列出的node-webkit和atom-shell之间的主要区别,链接为https://github.com/atom/atom-shell/blob/master/docs/development/atom-shell-vs-node-webkit.md。 - sepulchered
2
大象房间里的问题怎么办:调试。我一直在使用nw.js,发现在Linux平台上开发时调试功能相当缺乏。对于开发大型应用程序来说,调试是一个至关重要的特性,在我看来。我们能否将调试添加到希望讨论的功能列表中? - Timothy C. Quinn
@JavaScriptDude 谢谢,我已经把它加到列表中了。 - Sven Slootweg
@JavaScriptDude 在 NW.js 中进行调试基本上和任何 JavaScript 调试一样。唯一的技巧是确保你的应用的 package.json 文件中有 "window": { "toolbar":true },一旦完成这一步骤,就会有一个按钮可以打开调试控制台。 - John W. Clark
@John。谢谢,我了解调试nw.js和其他框架的各种方法。我想说的是,在比较各种基于chromium的框架时,考虑到它们在调试能力方面的差异非常重要。它们在实现上可能略有不同,并有机会优化开发人员的调试体验。在我看来,在开发复杂软件时,调试是最重要的功能之一。 - Timothy C. Quinn
显示剩余2条评论
5个回答

43

我大约两个月前进行了类似的研究,最终选择了node-webkit。node-webkit最大的优势是node.js和npm。npm的包管理非常好,而node的文件系统访问也很不错。

Brackets-shell看起来很有趣,但除了一个好的IDE之外,我真的不知道它比其他东西更好或更好。他们非常清楚地指出:“brackets-shell仅用于Brackets项目”,这让我感到不安。

https://github.com/adobe/brackets-shell#overview

Atom-shell似乎最近很活跃,但它看起来很像brackets,因为它们实际上正在编写一个与webkit运行时连接的编辑器/IDE。它还建立在node.js之上。这个缺点是很难在线搜索内容而不被提醒你的初中化学。

我真的不想要一个新的编辑器,大多数程序员已经有他们喜欢的编辑器了。对于实际的应用程序开发,它们基本上都工作相同,因为它们都使用webkit。你基本上像编写网站一样编写90-95%的内容,然后处理原生部分和一些配置。

这些东西对它们三个都是真实的: 平台-在Windows,Mac和Linux上运行 语言支持-HTML5,CSS3和Javascript:由于它们运行javascript,所以你可以下载并运行几乎任何你想要的库/框架。

webkit的重大限制在于编解码器的支持。通常,您将遇到非免费视频编解码器的问题,除非重新构建dll/so以支持它们。例如,发货的node-webkit无法播放mp4视频。


您能否详细说明在括号壳和原子壳中,关于MP4播放是否有任何区别?从您的回答中并不清楚这是大多数WebKit发行版中的怪癖,还是只存在于node-webkit中。 - Sven Slootweg
MP4播放问题是一个Webkit问题。你必须记住,Webkit本质上是Chromium,除非AV技术是开放和免费的,否则他们不会默认支持它。标准答案是替换/重建ffmpegsumo。用当前Chrome安装中的一个替换它似乎效果相当不错。 - John W. Clark
1
它恰好是基于bracket-shell构建的Brackets和基于atom-shell构建的Atom,但您可以使用任何编辑器或IDE来创建代码。我认为OP想要更多了解这3个之间的技术差异。能够在这3个类似运行时环境中看到像TodoMVC这样的东西将是很不错的。 - Ehtesh Choudhury
@SvenSlootweg,编解码器支持更多地取决于您使用的 WebKit 库。这三个都使用 Chromium 作为 WebKit 基础,因此它们都有相同的编解码器问题,并且可以通过相同的方式解决。 - John W. Clark
4
请注意,GitHub表示Electron始终意味着不仅仅是文本编辑器的外壳,“当我们开始时,我们的目标不仅是支持文本编辑器的需求。我们还想创建一个简单的框架,使人们能够使用Web技术构建跨平台桌面应用程序,并具备所有本地功能。”(http://blog.atom.io/2015/04/23/electron.html) - RationalDev likes GoFundMonica

40

我最近几天一直在使用Atom-Shell,目前非常喜欢它。

最好的一点是它由GitHub支持...这应该允许您长期定居于该平台,特别是如果它获得了大量关注。这也是通过与StrongLoop签订合同,借助直接的Node.js改进实现的,他们是主要的Node.js贡献者之一(他们声称雇用的Node.js核心开发人员比任何其他公司都多,甚至包括Joyent)。

我还发现很容易入手。花了我大约一天时间学习结构并运行第一个概念验证。非常酷。


要点:

  • 平台支持:Windows,Linux,Mac OSX(更多信息在此处
  • 语言功能支持:HTML5、CSS3、JS通过Chromium实现 - 目前为止,没有发现任何问题,但我尚未特别测试视频。
  • 本地功能:本机应用程序菜单、任务托盘支持、全局热键、协议处理程序支持(就我所见)
  • 可扩展性:优秀的Node.js集成,客户端和服务器都可以“require” Node.js模块和本地库。我还成功测试了Bower库(包括jQuery),没有出现问题。
  • 架构:涵盖了其他要点,总体来说非常流畅。

更新(11/25/14):我还没有在任何官方场合找到Atom-Shell的用例,但我已经用它构建了一些小应用,其中最复杂的是一个从我的项目管理软件中提取时间日志并创建Paypal发票的应用。

我对这个平台的看法仍然是积极的。它非常棒。

在我的时间计费应用程序中,我成功地引入了Bootstrap 3的Dashboard Example Template和几个节点模块(bluebird、Paypal SDK、Teamwork PM Client),创建了一个稍微复杂的应用程序。我花了几天时间,它的工作做得很好。

我真的想不出任何负面的评价Atom-Shell,它很稳定、快速、易于编程。希望这能帮助到某些人。


你能详细说明一下与node-webkit的区别吗?据我所知,所有(大部分?)这些点都可以通过node-webkit实现,但我不确定是否有什么遗漏。 - Sven Slootweg
嗨Luke,更新Atom-Shell应用程序本身是否可行? - Munish Kapoor
@SvenSlootweg 抱歉错过了您几个月前的评论;不幸的是,我对node-webkit并不很熟悉,无法有效地比较两者。 但我确实阅读了[这篇StrongLoop文章](http://strongloop.com/strongblog/whats-new-node-js-v0-12-multiple-context-execution/),至少表明Atom-Shell开创了新局面。 :\ - Luke Chavers
@MunishKapoor 用于开发?您可以下载最新版本.. 我基本上只是将旧的原子目录重命名并替换为新的。他们可能有一些时髦的过程,比如“npm update”——但我没有调查过。对于在客户端更新您的应用程序+原子壳,我不认为他们直接解决这个问题(根本不解决),并且可能预计您将使用安装程序或其他外部平台来解决这个问题。不过,我确实发现了他们文档中的这篇文章很有趣。(https://github.com/atom/atom-shell/blob/master/docs/tutorial/application-packaging.md) - Luke Chavers
1
@Moonwalker 是的,它使用一个名为“Asar”的应用程序进行打包。(请参见:“应用程序打包”). 我还发现了这个 Node-Webkit/Atom-Shell 比较 - Luke Chavers
显示剩余3条评论

22
除了完全支持Web标准外,NW.js还支持一系列非标准功能以进行本地应用程序开发,包括:

在维基中还有更多内容,包括菜单、托盘等。


3
在Kiosk模式下加1,Roger。我可以看到这将是我未来使用的功能。希望调试能力得到改善,这样我就可以继续使用nw.js,但现在我正在认真考虑暂时转换到Atom Electron来测试一下。我发现nw.js中的调试有些不足。 - Timothy C. Quinn
我有点担心“保护JS源代码”的包含 - 它与DRM处于同一类别,因为它不起作用。它只能“保护”那些本来就不需要“保护”的人。对我来说,这似乎不应该被宣传为一个功能。 - Sven Slootweg
1
这不像是Web上的数字版权管理(DRM)——JS程序员应该可以像C++程序员一样做任何事情,包括将源代码编译成机器码,当他们开发本地应用程序时。 - Roger Wang
@JavaScriptDude 你是指开发工具吗?在下一个版本(0.13)中,体验几乎与Chrome浏览器相同。 - Roger Wang
@Roger。抱歉回复晚了。是的,devtools。我发现存在以下限制,其中一些可能是在devtools本身:1)无法调试新启动的窗口。2)远程调试从未起作用。3)无法召回断点、监视变量和打开的源代码(每次重新启动应用程序时,所有设置都会被清除)。4)(真正的大问题)无法调试使用require()加载的代码。 - Timothy C. Quinn
@RogerWang 将源代码编译成机器代码是编译语言工作方式的副产品,它并不旨在“保护”源代码。我反对该项目符号仅仅是因为它暗示了它以某种方式“保护”您的代码(实际上并没有)。 - Sven Slootweg

10

我已经使用brackets-shell一段时间了,以下是我的一些发现:

  • brackets-shell主要作为brackets IDE项目下的一个shell开发,但该项目可以运行任何web应用程序。您只需要将其指向自己的html页面即可。Clint Berry撰写了一篇关于如何做到这一点的优秀教程:http://clintberry.com/2013/html5-desktop-apps-with-brackets-shell/
  • 该项目由Adobe支持,并有很多活动。
  • 文档可能需要改进

  • 平台支持他们支持Windows、Mac和Linux。还可以创建安装程序包。我只在Win和Mac上测试过,它工作得很好。

  • 功能支持 html5、css3、js。Html5视频不能直接使用,但很容易启用(默认情况下,ffmpegsumo.dll未复制到安装程序中,如果更改脚本以进行复制,则可以正常工作)。
  • 本地功能菜单栏、“打开文件”、文件系统访问。我没有使用任何这些功能,因为我所需的只是与节点进程通信。
  • 可扩展性内置了一个nodejs,您可以从您的web应用程序与node通信。通过这种方式,您可以使用节点访问文件系统等。
  • 架构该项目设置得很好,保持了一个良好的分离状态,即shell项目和在其中运行的自己的web应用程序之间的分离。在您自己的应用程序中,可用全局appshell对象,它为您提供了访问brackets功能(文件系统访问、与节点进程通信等)的权限。

6
让我远离 Brackes-shell 的原因是他们的概述。请看 https://github.com/adobe/brackets-shell 。“注意:brackets-shell 仅维护供 Brackets 项目使用。尽管有些人肯定已经成功地将其用作其他项目的应用程序外壳,但我们不为此提供任何官方支持,并且我们没有大量工作来使应用程序外壳易于重用。许多人可能会发现使用 node-webkit 这样的项目更容易,因为其设计更加通用。” - John W. Clark

5

需要注意的一件事(如果你在意),Electron官方不支持Windows Vista。Vista的市场份额大约是OSX 10.9和10.10之间的一半(这两个系统都被Electron完全支持)。Vista也被微软支持到2017年。

NW.js在Vista上运行良好,同时也支持OSX 10.9+、Ubuntu、Debian、Zorin、Manjaro、Arch以及其他大多数基于Debian的Linux操作系统。值得关注的是,Electron拒绝了针对他们平台上Ubuntu特定错误的PR请求。

NW.js在XP上也可以运行。目前仍有18%的市场份额在使用XP。因此,如果您的桌面应用程序更加通用或想要接触仍在使用XP的后期采用者,那么NW.js(0.14.7)可能更适合您,因为Electron只支持Win 7及以上版本。

如果您使用NW.js 0.12.3,您还可以支持OSX 10.6+和基于Debian的旧版本Linux操作系统(如Ubuntu)以及Win XP+。建议您为这些遗留系统专门构建,并对新的操作系统使用较新版本的NW.js。

1
Chrome并没有在微软停止支持后也停止支持 - 支持已延长至2015年底 - http://chrome.blogspot.com/2015/04/providing-updates-for-chrome-for-xp.html - Karol Klepacki
电子(原子壳)无法在RHEL 6.6及以下版本上运行,且源代码无法在这些发行版上编译。 - Michael Kruglos
你可以使用nw-builder来创建MAS版本。此外,还有适用于NW.js的ARM构建 - Jaredcheeda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接