javascript - 将node.js webapp打包为普通的桌面应用程序

我搜索了一下但是找不到现有的工具。

我有一个node.js网络服务器,它可以在你自己的计算机上运行,为你做一些时髦的事情。 如果我可以双击.app而不是在命令行上安装nodejs和npm并运行localhost:3000,那将是非常令人敬畏的。

.app可执行文件将清空节点服务器并打开一个简单的本机webkit窗口,如果我在命令行上运行,它将显示通常在localhost:3000上的内容。

然后,这个本机应用程序可以通过mac app store分发。 和bam,一个node.js桌面应用程序。

有这样的工具吗? 或者有任何技术原因,这不会像我想象的那样起作用吗?

5个解决方案
90 votes

选项1:电子(又称原子壳)

这是github的Atom编辑器使用的shell。 它与node-webkit非常相似,但它首先运行脚本,你必须为用户创建一个视图/窗口。 还有一些其他的细微差别,但值得一看。


选项2:NW.js以前是node-webkit

要点是,它基本上扩展了JS引擎,为您编写支持节点扩展对象模型的基于Web的应用程序,以及模块......然后将package.json start.html模块和js文件打包成一个zip(带有 .nw扩展名)并使用nw(.exe)运行..有windows,mac和linux版本可用。


选项3:推力(节点适配器)

这是一个真正失去了webkit / chrome绑定与ipc通道到启动应用程序。 您可以使用消息通道,也可以将应用程序编写为节点中更传统的服务器端应用程序,并控制窗口启动。 这可能适合你。

Thrust具有多种语言的绑定。 我把它放在MacGapNode之前只是因为我首先支持跨平台选项。


选项4:MacGapNode(仅限OSX)

带节点集成的MacGap(似乎变得陈旧)


旁白:服务......

我不能在OSX上代表OSX,但很可能在NodeJS中创建后台服务安装,并在桌面上创建指向“本地”站点的链接。 大多数浏览器都有一个不显示所有功能的选项(特别是我知道firefox)。

我知道你的问题特别是OSX,但是在Windows中你可以使用NSSM来运行任何服务,我已经在Windows中将它用于基于NodeJS的服务。 我认为上面的一些其他选项会更好,具体取决于您的需求。


删除:

  • nexe - 陈旧/未维护
  • AppJS - 替换为DeskShell
  • DeskShell - 陈旧,网站离线
  • node-webkit -renamed到NW.js
  • XULRunner项目陷入停滞,并且非常落后。

这个答案是针对多个问题复制的,这些引用主要是为了方便更新。

  • 将node.js webapp打包为普通桌面应用程序[关闭]
  • 将Node.js应用程序打包为osx应用程序
Tracker1 answered 2019-09-10T00:00:40Z
21 votes

您可以使用AppJS完成此任务:[https://github.com/appjs/appjs]

Motin answered 2019-09-09T23:58:05Z
8 votes

我建议调查Topcube,它的目标是“让节点开发人员使用HTML5 + CSS3作为GUI平台,为他们的节点服务器提供桌面GUI。” 在github的Topcube。

Brian Heese answered 2019-09-10T00:01:04Z
-1 votes

目前有很多方法可以实现这一目标。

包装节点+ html5应用程序空间的明显赢家,目前是Electron(由Atom,VSCode,Slack,Discord等使用)。

您还可以使用打包为应用程序的任何其他语言(使用这些语言/堆栈的工具),并检查节点安装,使用节点启动“服务器”脚本,然后启动默认浏览器(或某些Web视图组件, 其他一些手段),最后设置位置到节点服务。 这是一种非常轻量且高效的方法,但是不像OS那样与Electron集成。

Electron的主要竞争对手是NW.js.据我所知,NW.js的主要特征是Electron还没有(还)是编译/混淆。 而Electron使自动更新变得容易。

[https://electron.atom.io/][https://nwjs.io/]

Devin McKeon answered 2019-09-10T00:01:55Z
-4 votes

你不能用bash脚本做到这一点吗? 我不知道提供详细信息,但这可能是要走的路。

Chris Kitching answered 2019-09-10T00:02:19Z
translate from https://stackoverflow.com:/questions/6834537/packaging-a-node-js-webapp-as-a-normal-desktop-app