如何从一个Node.js应用程序的EXE文件?

我有一个我写的节点应用程序,我运行如下:

node.exe app.js inputArg

有什么办法可以将它打包到一个.exe本身? 所以我可以做这样的事情?

App.exe inputArg

我有一些方法通过使用batch file来伪造,所以我可以这样做:

App.bat inputArg

但是这需要我拥有该文件夹中的所有依赖项和节点,这并不理想。

有几个select,无论是自由和商业。 我没有使用过它们,但理论上它们应该工作:

  • Iexpress(原生Windows工具)
  • 快速批量文件编译器 (商业)
  • “高级”批处理EXE转换器“ (免费)

大多数需要您将batch file保存为主可执行文件,然后捆绑node.exe和您的脚本。

根据您的脚本,您也可以select将其移植到JSDB ,该脚本支持通过简单地向其添加资源来创build可执行文件的简单方法 。

第三个准解决scheme是将节点保存在C:\utils ,并将此文件夹添加到PATH环境variables中。 然后,你可以在那个运行node +你的首选脚本的目录下创build.bat文件 – 这样我就可以在windows上获得coffeescript的coffee 。 这个设置可以通过batch file,vb脚本或安装程序自动完成。

我使用的解决scheme是Roger Wang的node-webkit 。

这是打包nodejs应用程序并分发它们的一个很好的方法,甚至可以让您select将整个应用程序“捆绑”为单个可执行文件。 它支持Windows,Mac和Linux。

以下是关于部署node-webkit应用程序的各种选项的一些文档,但简而言之,您可以执行以下操作:

  1. 压缩所有的文件,在根目录下有一个package.json文件
  2. 将扩展名从.zip更改为.nw
  3. 复制/ b nw.exe + app.nw app.exe

正如一个附加说明 – 我已经运出了几个生产盒/安装光盘应用程序使用它,它的工作很好。 相同的应用程序运行在Windows,Mac,Linux和networking上。

对于任何人都在这个问题上磕磕绊绊,现在有两个项目创build了你的节点项目, EncloseJS和Electron.atom.io ,他们略有不同:

  1. EncloseJS会将您的项目编译为本地代码,它们还包括资源和nodejs安装(系统不需要安装nodejs来执行.exe)。 您的源代码将不会被包括在内。 生成的可执行文件是Windows ONLY(.exe)。 现在所有平台都受支持。 现在它需要商业产品的许可证。
  2. Electron.atom.io,虽然它不会压缩并为您生成.exe,它可以用来分发nodejs应用程序,因为它们提供了一种分配应用程序的方式。 好处是电子是多平台的(windows,mac osx,linux),缺点是你的源代码将被包括在内,甚至很难提供一种方法来将你的应用程序分布在一个asar文档中。 这不会是防弹的,但它仍然比你的来源更好。

默认情况下,Windows将.js文件与Windows脚本宿主 ,微软的独立JS运行时引擎关联起来。 如果在命令提示符下键入script.js (或者双击Explorer中的.js文件),脚本将由wscript.exe执行。

这可能是用全局设置来解决本地问题 ,但是可以将.js文件与node.exe 关联 node.exe ,以便在命令提示符处键入script.js ,或者双击/拖动项目到脚本中,都可以使用Node启动它们。

当然,如果像我一样,你已经把一个.js文件和一个编辑器关联起来,双击它们就可以打开你最喜欢的文本编辑器,但是这个build议不会有什么好处。 您也可以在 “ .js文件中添加一个右键单击菜单项 “Execute with Node”,尽pipe这个select并不能解决您的命令行需求。


最简单的解决scheme可能只是使用batch file – 您不必在脚本所在的文件夹中拥有Node的副本,只需完全引用Node可执行文件即可:

 "C:\Program Files (x86)\nodejs\node.exe" app.js %* 

另一种select是这个非常简单的C#应用​​程序,它将启动节点使用自己的文件名+ .js作为脚本运行,并传递任何命令行参数。

 class Program { static void Main(string[] args) { var info = System.Diagnostics.Process.GetCurrentProcess(); var proc = new System.Diagnostics.ProcessStartInfo(@"C:\Program Files (x86)\nodejs\node.exe", "\"" + info.ProcessName + ".js\" " + String.Join(" ", args)); proc.UseShellExecute = false; System.Diagnostics.Process.Start(proc); } } 

所以,如果你命名结果EXE“app.exe”,你可以键入app arg1 ...和节点将开始与命令行"app.js" arg1 ... 请注意,C#bootstrapper应用程序将立即退出,从而使Node负责控制台窗口。

由于这可能是相对广泛的利益,我继续前进,并在GitHub上提供 ,包括编译的EXE,如果与陌生人进入货车是你的事情。

由于这个问题已经得到解答,另一个解决scheme已经启动。

https://github.com/appjs/appjs

在写这篇文章的时候,这是通过一个剥离下来的铬包编译成可执行文件来打包node.js应用程序的最终解决scheme。

编辑:AppJS不再活动,但本身build议一个叫做deskshell的叉子。

https://github.com/sihorton/appjs-deskshell/

还没有尝试过,但nexe看起来像nexe可以做到这一点:

https://github.com/crcn/nexe

这里有很多很好的答案,但是并不像JXcore那么简单。

一旦你在Windows上安装了JXcore,你只需要运行:

 jx package app.js "myAppName" -native 

这将生成一个.exe文件,您可以分发,并且可以在没有任何外部依赖的情况下执行(您甚至不需要系统上的JXcore和Node.js)。

以下是关于该function的文档: http : //jxcore.com/packaging-code-protection/#cat-74

有点晚了,但基于这个答案 ,我创build了一个快速的“如何”的博客文章,使用先进的“批量EXE转换器

http://www.alexjamesbrown.com/development/create-a-standalone-exe-to-run-a-node-js-application/

我发现这些解决scheme中的任何一个都满足了我的要求,所以制作了我自己的名为node2exe的节点。 它可以从https://github.com/areve/node2exe获得;

我向你推荐BoxedApp。 这是一个工作得很好的商业产品。 它适用于任何NodeJS应用程序。 最终用户只会为您的应用程序获取一个EXE文件。 无需安装。

例如,在Electron中,最终用户需要安装/解压缩应用程序,他将看到代码的所有源文件。

BoxedApp它打包了NodeJS应用程序需要的所有文件和依赖关系。 它支持压缩,并且编译的文件在Windows XP +上工作

当您使用它时,一定要将Node.EXE添加到编译的应用程序。 select一个支持Windows XP的节点版本(如果你需要的话)

该程序支持命令行参数,所以封装后,你可以做

 c:\myApp argument1 

你可以在你的节点代码中获得参数:

 process.argv[1] 

有时您的应用程序具有文件依赖性,因此BoxedApp中可以添加任何文件夹和文件作为依赖项,例如,您可以插入一个设置文件。

 var mySettings=require('fs').readFileSync('./settings.jgon').toString() 

更多信息:

  • 公司
  • 该产品
  • 下载试用版

只是一个说明:通常我会推荐关于开源/免费软件,但在这种情况下,我没有find任何工作完成。

尝试disclose : https : //github.com/pmq20/disclose

disclose本质上是一个自我解压缩的EXE出你的Node.js项目和Node.js解释器具有以下特点,

  1. 没有GUI。 纯CLI。
  2. 没有运行时的依赖关系
  3. 支持Windows和Unix
  4. 第一次运行缓慢(提取到caching目录),然后永远快速运行

尝试node-compiler : https : //github.com/pmq20/node-compiler

我做了一个名为node-compiler的新项目来将你的Node.js项目编译成一个可执行文件。

它比第一次运行缓慢,因为你的源代码和Node.js解释器一起编译,就像标准的Node.js库一样。

此外,它将文件和目录请求透明地redirect到内存,而不是在运行时redirect到文件系统。 所以不需要源代码来运行编译的产品。

它是如何工作的: https : //speakerdeck.com/pmq20/node-dot-js-compiler-compiling-your-node-dot-js-application-into-a-single-executable

与同类项目相比,

  • pkg( https://github.com/zeit/pkg ):Pkg hacked fs。* APIdynamic地访问包内文件,而Node.js编译器将它们留在一边,而是通过libsquash在更深层次上工作。 Pkg使用JSON来存储包内文件,而Node.js编译器使用更复杂和广泛使用的SquashFS作为其数据结构。

  • EncloseJS( http://enclosejs.com/ ):EncloseJS将包内文件的访问权限限制为5个fs * API,而Node.js编译器则支持所有fs。* API。 EncloseJS是专有许可的,在使用Node.js编译器的时候会收取费用,而且用户可以免费使用它并免费修改它。

  • Nexe( https://github.com/nexe/nexe ):由于使用了browserify,Nexe不支持dynamic需求,而Node.js编译器支持各种需求,包括require.resolve。

  • asar( https://github.com/electron/asar ):Asar使用JSON来存储文件的信息,而Node.js编译器使用SquashFS。 Asar将代码归档和可执行文件分开,而Node.js编译器将所有JavaScript源代码与Node.js虚拟机连接在一起,并生成一个可执行文件作为最终产品。

  • AppImage( http://appimage.org/ ):AppImage只支持内核支持SquashFS的Linux,而Node.js编译器支持Linux,macOS和Windows的所有三个平台,同时没有任何内核的特殊要求。

厌倦了从命令提示符开始获胜,然后我碰到了这个。 稍微改进版本 在什么josh3736 。 这使用一个XML文件来抓取一些设置。 例如, Node.exe的path以及在默认app.js中启动的文件。 此外,您的app.js(或server.js或任何你所说的)指定的加载(生产,开发等)的环境。 从本质上讲,它添加了NODE_ENV={0} ,其中{0}是app.js中configuration的名称,作为一个var。 您可以通过修改config.xml中的“mode”元素来完成此操作。 你可以在这里抓住这个项目==> github 。 在Post Build事件中注意,你可以修改复制path来自动将你的config.xml和可执行文件复制到你的Nodejs目录,只是为了保存一个步骤。 否则,编辑这些,否则你的构build会发出警告。

 var startInfo = new ProcessStartInfo(); startInfo.FileName = nodepath; startInfo.Arguments = apppath; startInfo.UseShellExecute = false; startInfo.CreateNoWindow = false; startInfo.WindowStyle = ProcessWindowStyle.Hidden; if(env.Length > 0) startInfo.EnvironmentVariables.Add("NODE_ENV", env); try { using (Process p = Process.Start(startInfo)) { p.WaitForExit(); } } catch (Exception ex) { MessageBox.Show(ex.Message.ToString(), "Start Error", MessageBoxButtons.OK); } 

可能有很多其他的select,但据我所知,在GitHub https://github.com/zeit/pkg上有一个正在开发的项目。; 你可以玩它。 还有一个在https://github.com/nexe/nexe,但没有积极的开发。;

有几天我一直在探讨这个话题,这是我发现的。 期权分为两类:

如果你想build立一个桌面应用程序,最好的select是:

1- NW.js :让您直接从DOM调用所有Node.js模块,并启用一种用所有Web技术编写应用程序的新方法。

2- 电子 :使用JavaScript,HTML和CSS构build跨平台桌面应用程序

这是一个很好的比较: NW.js和电子比较 。 我认为NW.js更好,它也提供了一个应用程序来编译JS文件。 也有一些独立的可执行和安装程序的build设者,如Enigma虚拟盒 。 他们都包含Chrome的embedded式版本,这是服务器应用程序不必要的。

如果你想打包一个服务器应用程序这些是最好的select:

节点编译器 :为Node.jsdevise的前期(AOT)编译器,正常工作。

Nexe :从您的node.js应用程序中创build一个可执行文件

在这个类别中,我相信node-compiler更好,它支持dynamicrequire和native节点模块。 使用起来非常简单,输出从25MB开始。 您可以在“节点编译器”页面中阅读与其他解决scheme的完整比较。 我没有读到关于Nexe的很多内容,但现在看来Node编译器似乎并没有使用V8快照function将js文件编译为二进制格式,而是计划在版本2中使用。它还将具有内置的安装程序构build器。

试试从你的node.js应用程序创build一个单一的可执行文件的nexe

https://github.com/nexe/nexe

我所知道的最好的工具是NodeJS工具: zeit / pkg

它非常易于使用(比Nexe更多,只是作为一个例子),你可以在全局npm install -g pkgnpm install -g pkg

为macOS,Linux和Windows创build可执行文件:

pkg exampleApp.js

我有一些复杂的代码使用NodeJS套接字服务器,我尝试了不同的应用程序,没有一个创build它,除了zeit / pkg

有一个名为nodebob的开源构build工具项目。 我假设工作平台的窗口,

  1. 只需克隆或下载项目
  2. 将你的所有node-webkit项目文件复制到app文件夹中。
  3. 运行build.bat脚本。

您将在发布文件夹中find可执行文件。