如何从一个Node.js应用程序创建可执行文件?

173

我有一个Node.js应用程序,它需要通过以下命令运行:

node.exe app.js inputArg

是否有办法将其打包成独立的 .exe 文件呢?这样我就可以像这样运行:

App.exe inputArg

我也可以通过使用批处理文件来模拟这个过程,例如:

App.bat inputArg

但这需要在同一文件夹中安装所有依赖项和 Node.js,这并不理想。


1
可能是重复问题:https://dev59.com/uW025IYBdhLWcg3wOzE9 - Mike Christensen
3
这似乎是重复的问题集锦,包含以下链接:https://dev59.com/uW025IYBdhLWcg3wOzE9,https://dev59.com/d1vUa4cB1Zd3GeqPvqUK,https://dev59.com/Xmsz5IYBdhLWcg3wADMm,https://dev59.com/n2oy5IYBdhLWcg3wEJ9n,https://dev59.com/S2HVa4cB1Zd3GeqPoJWp,https://dev59.com/ZWYr5IYBdhLWcg3wytLe。 - Mogsdad
这里有一份不错的工具列表:https://dev59.com/dWw15IYBdhLWcg3wFH3f#12486874 - GrGr
2
我认为任何在这里添加答案的人都应该考虑是否已经完成。这个问题正在变成一堆链接,指向各种质量/活动不同的开源产品。 - Liam
@Liam 一个关于SO的好描述 :) - john k
21个回答

5

nexe npm包可以将您的Node.js应用程序打包成单个可执行文件。

nexe git存储库


5

目前,我认为可行的方式是使用Deno

这是

deno compile mainProgram.js

现有的Node.js项目可能需要进行某种形式的转换,至少需要对require语句进行修改,(将Node.js项目转换为Deno)


4

我发现这些解决方案都不符合我的要求,因此我制作了自己的版本节点,称为node2exe。它可以实现这个功能。可以在https://github.com/areve/node2exe 获取。


4

我已经探索了这个主题几天,以下是我的发现。选项分为两类:

如果您想建立桌面应用程序,最好的选择是:

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文件编译为二进制格式,但计划在第二个版本中实现此功能。它还将具有内置的安装程序生成器。


3
"Electron"不是OP问题的有效建议,它是一个完全不同的Node框架。 - progyammer
很好的比较! - Vlad

4
我推荐你使用BoxedApp。它是一款商业产品,非常有效。它适用于任何NodeJS应用程序。最终用户只需获取一个.exe文件即可使用您的应用程序,无需安装。
例如,在Electron中,最终用户需要安装/解压缩您的应用程序,并且可以看到您代码的所有源文件。
BoxedApp将打包所有NodeJS应用程序所需的文件和依赖项。它支持压缩,并且编译后的文件可在Windows XP及以上版本上运行。
使用时,请确保将Node.EXE添加到已编译的应用程序中。选择支持Windows XP的Node版本(如果需要)。
该程序支持命令行参数,因此在打包后,您可以执行以下操作。
c:\myApp argument1

您可以在节点代码中获取参数:

process.argv[1]

有时候你的应用程序有文件依赖,所以在BoxedApp中你可以将任何文件夹和文件作为依赖项添加进去,例如,你可以插入一个设置文件。
var mySettings=require('fs').readFileSync('./settings.jgon').toString()

更多信息:

仅供参考:通常我会推荐开源/免费软件,但在这种情况下,我没有找到任何可以完成工作的东西。


1
它还支持良好的代码保护,因为数据保存在RAM中而不是硬盘中。 - z0r1fan

3

2

如果你已经厌倦了在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);
        }

0

有一个名为nodebob的开源构建工具项目。我假设它是在Windows平台上运行的。

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

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


0

做这件事的一种方法是将您的代码发布为NPM模块,并在package.json中提供一个bin文件给NPM,例如:"bin": "app.js"1

用户要安装您的CLI,必须先安装Node,并运行npm i -g [packageName](-g是全局安装)

这个答案非常简单,但缺点是需要安装Node。

如果您想让您的应用程序变成可执行文件而不需要Node或NPM的帮助,我建议使用nexe


0

注意:您需要安装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。


更新我的回答:我发现了一个叫做nvm的东西,你可以使用它来代替nodeenv。我不知道怎么做,但是你可以尝试一下。你也可以使用官方的node.js安装程序来代替nodeenv,并将其安装在你的项目目录中。对于这个问题,我也不知道如何操作。 - Shaurya Chhabra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接