我有一个Node.js应用程序,它需要通过以下命令运行:
node.exe app.js inputArg
是否有办法将其打包成独立的 .exe 文件呢?这样我就可以像这样运行:
App.exe inputArg
我也可以通过使用批处理文件来模拟这个过程,例如:
App.bat inputArg
但这需要在同一文件夹中安装所有依赖项和 Node.js,这并不理想。
我有一个Node.js应用程序,它需要通过以下命令运行:
node.exe app.js inputArg
是否有办法将其打包成独立的 .exe 文件呢?这样我就可以像这样运行:
App.exe inputArg
我也可以通过使用批处理文件来模拟这个过程,例如:
App.bat inputArg
但这需要在同一文件夹中安装所有依赖项和 Node.js,这并不理想。
目前,我认为可行的方式是使用Deno
这是
deno compile mainProgram.js
现有的Node.js项目可能需要进行某种形式的转换,至少需要对require语句进行修改,(将Node.js项目转换为Deno)
我发现这些解决方案都不符合我的要求,因此我制作了自己的版本节点,称为node2exe。它可以实现这个功能。可以在https://github.com/areve/node2exe 获取。
我已经探索了这个主题几天,以下是我的发现。选项分为两类:
如果您想建立桌面应用程序,最好的选择是:
1- NW.js:可以直接从DOM调用所有Node.js模块,并使用所有Web技术编写应用程序的新方法。
2- Electron:使用JavaScript、HTML和CSS构建跨平台桌面应用程序。
以下是它们之间的比较:NW.js和Electron比较。我认为NW.js更好,它还提供了一个编译JS文件的应用程序。还有一些独立的可执行文件和安装程序生成器,例如Enigma Virtual Box。它们都包含了Chrome的嵌入版本,对于服务器应用程序来说是不必要的。
如果你想打包一个服务器应用程序,以下是最好的选择:
node-compiler:面向Node.js的预编译器(AOT)编译器,可以完美运行。
Nexe:创建一个单一的可执行文件,将你的node.js应用程序整合在一起。
在这个类别中,我认为node-compiler更好,支持动态require和本地node模块。它非常容易使用,输出从25MB开始。您可以在Node Compiler页面上阅读与其他解决方案的完整比较。我没有读过太多关于Nexe的东西,但目前看来,Node Compiler不会使用V8快照功能将js文件编译为二进制格式,但计划在第二个版本中实现此功能。它还将具有内置的安装程序生成器。
c:\myApp argument1
您可以在节点代码中获取参数:
process.argv[1]
var mySettings=require('fs').readFileSync('./settings.jgon').toString()
更多信息:
仅供参考:通常我会推荐开源/免费软件,但在这种情况下,我没有找到任何可以完成工作的东西。
可能有很多其他的选择,但据我所知,GitHub上正在积极开发一个项目https://github.com/zeit/pkg。你可以尝试使用它。 还有一个https://github.com/nexe/nexe,但不在积极开发中。
如果你已经厌倦了在Windows命令提示符下开始工作,那么我找到的这个方法可能会对你有所帮助。相对于josh3736的版本,稍微进行了改进。它使用一个XML文件来获取一些设置。例如,Node.exe
的路径以及默认的app.js文件的启动文件。还有你在app.js(或server.js或其他名称)中指定的要加载的环境(生产、开发等)。本质上,它为你添加了NODE_ENV={0}
,其中{0}是你在app.js中配置的名称作为变量。你可以通过修改config.xml中的"mode"元素来实现这一点。你可以在这里获取该项目 ==> github。请注意,在后期构建事件中,你可以修改复制路径,以自动复制你的config.xml和可执行文件到你的Nodejs
目录中,以节省一个步骤。否则,请将其删除,否则你的构建将会抛出警告。
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);
}
有一个名为nodebob的开源构建工具项目。我假设它是在Windows平台上运行的。
您将在发布文件夹中找到可执行文件。
注意:您需要安装Python和pip(在Debian上可能需要使用easy_install或dpkg)才能使此工作正常运行。
使用nodeenv创建一个节点虚拟环境(使用python -m pip install nodeenv
进行安装)(使用python -m nodeenv envname
进行创建)
创建一个.bat文件,使用节点虚拟环境的exe文件启动代码(存储在./envname/Scripts/node.exe
中),
然后使用一些bat到exe转换器(http://www.battoexeconverter.com/)idk
然后通过使用某个程序将所有文件制作成安装程序,除了bat文件之外,使用转换后的exe文件。就这样。
您可以使用NVM或官方节点安装程序代替nodeenv。