EncloseJS vs Nexe

有没有人有经验编译node.js应用程序到可分发的二进制文件? 我看到的两个选项是encloseJS和nexe,但除了使用encloseJS更快的编译时间之外,并没有真正看到重大差异。

我一直在使用JXcore – http://jxcore.com除了编译以外,它还有许多特性,包括multithreading和重启pipe理。 但它似乎被阻止在节点0.10。 现在Node 4已经不在了,而且长期支持安排已经到位,所以现在可能是另外一个看Nexe和Enclose的时候了,因为我没有使用额外的JXcorefunction。

我注意到,enclose.js( http://enclosejs.com/ https://www.npmjs.com/package/enclose )不是开源的,仅供评估之用:

您同意不在任何networking上或通过远程或其他方式在多台计算机上安装或使用EncloseJS的任何单个副本。 此规定仅适用于单个副本,不适用于多系统许可证或评估版本。 如果EncloseJS是由您的雇主购买的您同意在按照此处所述在多台计算机上安装EncloseJS之前获得您的雇主的明确许可。

附有四个特定版本(今天)的作品:0.12.7,2.5.0,4.2.2,5.1.0。

使用express.io使用Enclose时遇到了问题。 可能有一个解决scheme,但我没有探索太多。

Nexe( https://www.npmjs.com/package/nexe )是一个拥有MIT许可证的开源软件。 该网站注意到一些额外的限制,如不使用本地模块,只有遍历“简单”的要求,但我怀疑这些都与Enclose相同。 您可以select任意版本的节点,而Nexe似乎下载节点源并从零开始构build所有内容,这需要一些时间(第一次17分钟,4分钟不重新编译)。

Nexe给了我express.io的警告。 对于一个简单的4行应用程序,使用默认选项(最新的节点5.1.0),该exe不起作用 – 抱怨无法find模块./lib。

var app = require('express.io')(); app.http().io(); app.listen(8081); app.get('/',function(req,res){res.send('Hi!');}); 

但是,当我改变它来排除express.io模块,它在Nexe工作。

 var module = 'express.io'; var app = require(module)(); app.http().io(); app.listen(8081); app.get('/',function(req,res){res.send('Hi!');}); 

我发现离开express.io(这似乎没有维护一年),我的应用程序可以由Enclose编译,但不能由Nexe编译:

 var express = require('express'); var app = express(); var server = require('http').createServer(app); var io = require('socket.io')(server); app.get('/',function(req,res){res.send('Hi!');}); server.listen(8081); 

Nexe和Enclose似乎都有类似的stream行/下载统计。