NW.js、Brackets-Shell 和 Electron 之间的功能区别是啥?

Posted

技术标签:

【中文标题】NW.js、Brackets-Shell 和 Electron 之间的功能区别是啥?【英文标题】:What are the functional differences between NW.js, Brackets-Shell and Electron?NW.js、Brackets-Shell 和 Electron 之间的功能区别是什么? 【发布时间】:2014-07-07 01:05:45 【问题描述】:

现在 TideSDK 实际上已经死了,我一直在寻找替代的“包装器”来将 html/CSS/JS 应用程序作为独立的桌面应用程序运行。到目前为止,我遇到的三个可行选项是 NW.js(以前称为 node-webkit)、brackets-shell 和 Electron(以前称为 atom-shell)。

问题在于,在功能集、兼容性等方面,这三者之间似乎没有足够完整的比较。我希望将其变成一个或多或少的规范线程(目标) 三者之间的差异,尤其是在以下方面:

平台支持;操作系统、依赖项等。 语言功能支持,就 HTML5、CSS3 和 javascript 而言。想想诸如“HTML5 视频是否可以工作,如果可以,有哪些编解码器可用?” 非标准的额外功能,例如托盘图标、弹出通知和操作系统呈现的菜单栏。 可扩展性;例如。能够“插入”本机代码、与 Node.js 对话等。 架构;尤其是影响开发人员日常使用的架构差异。 调试;包括开发工具,与node-inspector等常用工具的兼容性等。 ...等等。

作为应用程序开发人员,在他们之间做出选择时,重要的客观技术差异是什么?

【问题讨论】:

在此期间您是否有幸看到这些差异?这个周末可能会做一些挖掘工作 @stefan 还没有,没有:/ 我已经在实际意义上对 node-webkit 进行了一些实验,但还没有超越。还没有开始寻找差异的正式文件...... 嗯,这是 atom-shell 团队 github.com/atom/atom-shell/blob/master/docs/development/… 概述的 node-webkit 和 atom-shell 之间的主要区别。 房间里的大象怎么样:调试。一直在用nw.js,发现用linux平台开发的时候,调试相当欠缺。要开发大型应用程序,调试是 IMO 的一项关键功能。我们可以将调试添加到可与之交谈的理想功能列表中吗? @JavaScriptDude 谢谢,我已将其添加到列表中。 【参考方案1】:

大约两个月前我做了类似的研究,最后我选择了 node-webkit。 node-webkit 最大的优势是 node.js 和 npm。 npm 的包管理非常好,node 对文件系统的访问做得很好。

Brackets-shell 看起来很有趣,但除了一个不错的 IDE 之外,我并没有真正理解是什么让这个 IDE 比其他的更好或更好。他们非常清楚“括号壳仅由括号项目维护使用”,这让我尖叫。

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

Atom-shell 似乎最近很活跃,但它看起来很像括号,因为它们真的在编写,而编辑器/IDE 恰好附加到 webkit 运行时。它也建立在 node.js 之上。这个的缺点是很难在没有提醒你中学化学的情况下在线搜索东西。

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

这些事情对他们三个都是正确的 平台 - 在 Windows、Mac 和 Linux 上运行 语言支持 - HTML5、CSS3 和 Javascript:因为它们运行 javascript,您可以下载并运行几乎任何您想要的库/框架。

关于 webkit 的最大警告是编解码器支持。通常你会遇到非免费视频编解码器的问题,除非你重建 dll/so 来支持它们。例如,随附的 node-webkit 不会播放 mp4 视频。

【讨论】:

您能否详细说明在括号壳和原子壳中播放 MP4 是否有任何区别?从您的回答中不清楚这是大多数 WebKit 发行版中的怪癖,还是仅在 node-webkit 中。 MP4 播放出现问题是 webkit 问题。你必须记住,webkit 本质上是铬的,除非 AV 技术是开放和免费的,否则它们不会开箱即用地支持它。标准答案是替换/重建 ffmpegsumo。用您当前安装的 Chrome 替换它似乎效果很好。 恰巧Brackets 是基于bracket-shell 而Atom 是基于atom-shell,但您可以使用任何编辑器或IDE 来使用它们创建代码。我认为 OP 想要更多的是 3 之间的技术差异。在 3 个类似运行时的环境中看到类似 TodoMVC 的东西会很高兴。 @SvenSlootweg 编解码器支持更多的是与您正在使用的 webkit 一起使用的库。这三个都使用 Chromium 作为 webkit 基础,因此它们都有相同的编解码器问题,并且可以通过相同的方式解决。 请注意,GitHub 说 Electron 始终不仅仅是文本编辑器的外壳,"When we got started, our goal wasn't just to support the needs of a text editor. We also wanted to create a straightforward framework that would allow people to use web technologies to build cross-platform desktop apps with all of the native trimmings."【参考方案2】:

过去几天我一直在玩 Atom-Shell,到目前为止我很喜欢它。

最好的一点是它得到了 GitHub 的支持。这应该可以让您长期适应该平台,尤其是在它获得大量追随者的情况下。这也得益于与 StrongLoop 签订的合同的直接 Node.js 改进,他是 Node.js 的主要贡献者(他们声称雇佣的 Node.js 核心开发人员比任何其他公司都多,甚至乔伊恩特)。

我还发现上手相当舒服。我花了大约一天的时间来学习这个结构并让我的第一个概念验证运行起来。很酷。


要点:

平台支持: Windows、Linux、Mac OSX (More Info Here) 语言功能支持: HTML5、CSS3、JS via Chromium - 到目前为止,零问题,但我没有专门测试视频。 原生功能:原生应用菜单、任务托盘支持、全局热键、协议处理程序支持(目前为止我见过) 可扩展性: 出色的 Node.js 集成,客户端和服务器都可以“需要”Node.js 模块和本机。我还成功地测试了 Bower 库(包括 jQuery),没有出现任何问题。 架构:在其他方面有所介绍,但总体上非常流畅。

更新(2014 年 11 月 25 日):我还没有找到任何官方身份的 Atom-Shell 用例,但我已经用它为我自己构建了一些小应用程序使用,最复杂的是从我的 PM 软件中提取我的时间日志并创建 Paypal 发票的应用程序。

我对该平台的看法仍然是积极的。真是太棒了。

在我的开发票应用程序中,我成功引入了 Bootstrap 3 的 Dashboard Example Template 和一些节点模块(bluebird、Paypal SDK、Teamwork PM Client)来创建一个稍微复杂的应用程序。我花了几天时间完成了它的工作。

我真的想不出任何关于 Atom-Shell 的负面评价,它可靠、稳定、快速且易于编码。我希望这对某人有所帮助。

【讨论】:

您能具体说明一下与 node-webkit 的区别吗?据我所知,所有(大部分?)这些点都是由 node-webkit 提供的,但我不确定是否可能缺少一些东西。 嗨卢克是否可以自行更新 atom-shell 应用程序...? @SvenSlootweg 抱歉,我错过了您几个月前的评论;不幸的是,我并不精通 node-webkit,无法有效地比较两者。但我确实读过this StrongLoop article,这至少表明Atom-Shell 开辟了新天地。 :\ @MunishKapoor 用于开发?您可以下载最新版本。我或多或少只是重命名旧的 atom 目录并将其替换为新的。他们可能有一些时髦的过程,比如“npm update”——但我没有调查过。为了在客户端更新您的 app+atom shell,我认为他们(根本没有)直接解决这个问题,并且可能希望您为此使用安装程序或其他外部平台。不过,我确实发现 this article in their docs 很有趣。 @Moonwalker 是的,它使用一个名为“Asar”的应用进行打包。 (见:"Application Packaging")。我也刚刚发现了这个Node-Webkit/Atom-Shell comparison。【参考方案3】:

除了完全支持 Web 标准外,NW.js 还支持一系列用于原生应用程序开发的非标准功能,包括:

通过将 JS 源代码编译成机器码来保护它们:https://github.com/nwjs/nw.js/wiki/Protect-JavaScript-source-code-with-v8-snapshot 被监禁的开发工具:https://github.com/nwjs/nw.js/wiki/Devtools-jail-feature 您可以在 DOM 中执行更多操作的附加安全模型:https://github.com/nwjs/nw.js/wiki/Security https://github.com/nwjs/nw.js/wiki/Changes-to-DOM 增强的文件对话框:https://github.com/nwjs/nw.js/wiki/File-dialogs 自助服务终端模式:https://github.com/nwjs/nw.js/wiki/The-Kiosk-mode 支持不断增长的 chrome.* API 列表,包括 chrome.webRequest 以便您可以拦截来自 DOM 的 HTTP 请求:https://github.com/nwjs/nw.js/issues/518 从 0.13.0-alpha0 开始支持丰富的通知、打印预览、更多 chrome.* API、Chrome 应用和其他 Chromium 功能

在 wiki 中可以看到更多内容,包括菜单、托盘等。

【讨论】:

+1 在 Kiosk 模式下 Roger。我可以看到这是我将来会使用的功能。希望调试能力有所提高,这样我就可以继续使用 nw.js,但是现在我正在认真考虑切换到 Atom Electron 一段时间来试水。我发现 nw.js 中的调试有点欠缺。 我有点担心在其中包含“保护 JS 源”——它与 DRM 属于同一类,因为它不起作用。它只会“保护”那些你一开始就不需要“保护”的人。对我来说,这似乎不应该被宣传为一项功能。 这不像 Web 的 DRM —— JS 程序员应该能够像 C++ 程序员那样做任何事情,包括在开发原生应用程序时将源代码编译为机器代码。 @JavaScriptDude 你是说开发工具吗?在下一个版本 (0.13) 中,体验将几乎与 Chrome 浏览器相同。 @Roger。回复较晚,抱歉。是的,开发工具。我发现存在以下限制,其中一些可能存在于 devtools 本身中: 1) 没有启动新窗口的调试。 2) 远程调试从未奏效。 3)无法调用断点,观察变量和打开的源(每次重启应用程序,所有设置都被清除) 4)(真正的大问题)无法调试用 require() 加载的代码。【参考方案4】:

我使用括号壳已经有一段时间了,以下是我的一些发现:

brackets-shell 主要在brackets IDE 项目下作为shell 开发,但该项目可以运行任何Web 应用程序。您只需要将其指向您自己的 html 页面。 Clint Berry 写了一篇关于这样做的优秀教程:http://clintberry.com/2013/html5-desktop-apps-with-brackets-shell/ 该项目由 Adob​​e 提供支持,并且有很多活动

文档可能会更好

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

功能支持 html5、css3、js。 Html5 视频不能开箱即用,但很容易启用(默认情况下,ffmpegsumo.dll 不会复制到安装程序中,如果您更改脚本复制它会起作用)。 本机功能菜单栏,“打开文件”,文件系统访问。我没有使用任何这些,因为我需要的只是与节点进程的通信。 可扩展性 内置了一个nodejs,您可以从您的Web 应用程序与node 通信。这样就可以使用node访问文件系统等了。 架构 该项目设置良好,在 shell 项目和您自己在其中运行的 Web 应用程序之间保持了良好的分离。在您自己的应用程序中,可以使用全局 appshell 对象来访问括号功能(文件系统访问、与节点进程的通信......)。

【讨论】:

让我远离 Brackes-shell 的是他们自己的概述。 github.com/adobe/brackets-shell "注意:brackets-shell 只维护给 Brackets 项目使用。虽然有些人确实成功地将它用作其他项目的应用程序外壳,但我们不提供任何官方支持,我们还没有没有做大量工作来使应用程序外壳易于重用。许多人可能会发现使用像 node-webkit 这样的项目更容易,它在设计上更通用。“【参考方案5】:

有一点需要注意(如果您关心的话),Electron 官方不支持 Windows Vista。 Vista 的市场份额约为halfway between OSX 10.9 and 10.10(两者都得到 Electron 的全力支持)。在 2017 年之前,微软仍然支持 Vista。

NW.js 在 Vista 以及 OSX 10.9+ 中运行良好。 NW.js 适用于 Ubuntu、Debian、Zorin、Manjaro、Arch 和大多数其他基于 Debian 的 Linux 操作系统。 Electron 拒绝 PR 修复其平台上的 Ubuntu 特定错误,这令人担忧。

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。

【讨论】:

Chrome 并没有在 MS 之后停止支持 - 支持延长到 2015 年底 - chrome.blogspot.com/2015/04/… electron (atom-shell) 无法在 RHEL 6.6 及以下版本上运行,并且无法在这些发行版上编译源代码。 另一方面,Electron comes with Mac App Store-compatible builds 甚至supports ARM builds 您可以使用nw-builder 创建 MAS 版本。还有arm builds for NW.js。

以上是关于NW.js、Brackets-Shell 和 Electron 之间的功能区别是啥?的主要内容,如果未能解决你的问题,请参考以下文章

nw.js使用

十分钟轻松入门 nw.js 实现桌面应用程序

NW.js 入坑指南

检查 WebKit 上下文何时在 NW.js 中可用

NW.js 简介与使用

NW.JS填坑指南(解决Flash插件视频播放等故障)