有没有人有经验将node.js应用程序编译成可分发的二进制文件?我看到的两个选项是encloseJS和nexe,但除了使用encloseJS更快的编译时间之外,我们并没有真正看到重大差异。
答案 0 :(得分:11)
我一直在使用JXcore - https://github.com/jxcore/jxcore 除了编译之外,它还有许多功能,包括多线程和重启管理。但它确实似乎停留在0.10节点。现在节点4已经关闭,并且长期支持安排已经到位,可能是时候再看看Nexe和Enclose,因为我没有使用额外的JXcore功能。
我注意到enclose.js(http://enclosejs.com/ https://www.npmjs.com/package/enclose)不是开源的,只能用于评估目的:
您同意不会安装或使用EncloseJS的任何个人副本 一次一台计算机,而不是通过任何网络或通过远程或其他方式 访问。此规定仅适用于个人副本,不适用于 多系统许可证或评估版本。如果EncloseJS被购买 您的雇主您同意以前获得雇主的明确许可 如此处所述,在多台计算机上安装EncloseJS。
附上四个特定版本(今天):0.12.7,2.5.0,4.2.2,5.1.0。
我在使用带有express.io的Enclose时遇到了麻烦。可能有一个解决方案,但我没有探索太多。
Nexe(https://www.npmjs.com/package/nexe)是开放源代码,拥有MIT许可证。该网站还注意到一些其他限制,例如不使用本机模块,只能遍历“简单”要求,但我怀疑这些限制与Enclose相同。您可以选择任何版本的节点,Nexe似乎下载节点源并从头开始构建所有内容,这需要一些时间(第一次17分钟,重新编译4分钟而没有更改)。
Nexe给了我express.io的警告。对于一个简单的4行应用程序,使用默认选项(最新节点5.1.0),exe不起作用 - 抱怨无法找到模块./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似乎都有类似的受欢迎程度/下载统计数据。