Javascript 如何从node.js应用程序生成exe文件?

Javascript 如何从node.js应用程序生成exe文件?,javascript,windows,node.js,exe,Javascript,Windows,Node.js,Exe,我编写了一个节点应用程序,运行如下: node.exe app.js inputArg 有没有什么方法可以把它自己打包成一个.exe?所以我可以做这样的事 App.exe inputArg 我有办法通过使用批处理文件来伪装,所以我可以这样做: App.bat inputArg 但这要求我拥有该文件夹中的所有依赖项和节点,这并不理想。默认情况下,Windows将.js文件与Microsoft的独立js运行时引擎相关联。如果在命令提示下键入script.js(或双击资源管理器中的.js文件),脚本将

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

node.exe app.js inputArg

有没有什么方法可以把它自己打包成一个.exe?所以我可以做这样的事

App.exe inputArg

我有办法通过使用批处理文件来伪装,所以我可以这样做:

App.bat inputArg


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

默认情况下,Windows将
.js
文件与Microsoft的独立js运行时引擎相关联。如果在命令提示下键入script.js(或双击资源管理器中的
.js
文件),脚本将由
wscript.exe
执行

这可能是,但您可以使用
node.exe
替换
.js
文件,以便在命令提示符下键入script.js或双击/拖动项目到脚本上,将它们与node一起启动

当然,如果像我一样,你已经将
.js
文件与编辑器关联,这样双击它们就会打开你最喜欢的文本编辑器,那么这个建议不会有多大用处。您还可以将“使用节点执行”添加到
.js
文件中,尽管此替代方案无法解决您的命令行需求


最简单的解决方案可能是只使用批处理文件——您不必在脚本所在的文件夹中拥有节点的副本。只需绝对引用节点可执行文件:

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

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

类程序
{
静态void Main(字符串[]参数)
{
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;
系统.诊断.过程.启动(proc);
}
}
因此,如果将生成的EXE命名为“app.EXE”,则可以键入
app arg1…
,节点将使用命令行
“app.js”arg1…
启动。注意,C#bootstrapper应用程序将立即退出,让节点负责控制台窗口


由于这可能是一个比较广泛的兴趣,我继续做了这个,包括如果和陌生人一起进入货车是你的事情。

有一些选择,免费和商业。我没有使用过任何一种,但理论上它们应该可以工作:

  • (商业)
  • (免费软件)
大多数情况下,需要将批处理文件保留为主要可执行文件,然后绑定node.exe和脚本

根据脚本的不同,您还可以选择将其移植到,只需向其添加资源即可支持


第三种解决方案是将节点保留在类似
C:\utils
的位置,并将此文件夹添加到
PATH
环境变量中。然后,您可以在该目录中创建.bat文件,该文件运行node+您首选的脚本-我得到了coffeescript的
coffee
在windows上的这种工作方式。此设置可以通过批处理文件、vb脚本或安装程序自动完成。

厌倦了从命令提示符开始使用win,然后我也遇到了这个问题。稍微改进了一点。为了什么。这将使用XML文件获取一些设置。例如,
Node.exe的路径以及默认app.js中要启动的文件。还有您在app.js(或server.js或任何您称之为app.js的东西)中指定的要加载的环境(生产、开发等)。本质上,它添加了
节点_ENV={0}
,其中{0}是app.js中配置的名称,作为变量。您可以通过修改config.xml中的“mode”元素来实现这一点。您可以在这里获取项目==>。注意:在生成后事件中,您可以修改复制路径,以便通过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);
        }

既然这个问题已经得到了回答,另一个解决方案已经启动

在撰写本文时,这是通过编译成可执行文件的精简chromium包打包node.js应用程序的最终解决方案

编辑: AppJS不再处于活动状态,但它本身建议使用一个名为deskshell的fork


我使用的解决方案是Roger Wang的

这是一种打包和分发nodejs应用程序的绝妙方法,它甚至为您提供了将整个应用程序“捆绑”为单个可执行文件的选项。它支持windows、mac和linux

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

  • 使用根目录中的package.json压缩所有文件
  • 将扩展名从.zip更改为.nw
  • 复制/b nw.exe+app.nw app.exe
  • 作为补充说明,我已经发布了几个使用此功能的production box/install cd应用程序,效果非常好。同样的应用程序在windows、mac、linux和web上运行


    更新:项目名称已更改为“nw.js”,并正确位于此处:

    我确实发现这些解决方案中的任何一个都符合我的要求,因此我制作了自己的node版本node2exe,名为node2exe。它可以从

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


    这里有很多好的答案,但它们并不像你想象的那么简单

    在windows上安装JXcore后,只需运行:

    jx package app.js "myAppName" -native
    
    这将生成一个.exe文件,您可以分发该文件,并且可以在没有任何外部依赖关系的情况下执行该文件(系统上甚至不需要JXcore或Node.js)

    以下是有关该功能的文档:

    c:\myApp argument1
    process.argv[1]
    
    var mySettings=require('fs').readFileSync('./settings.jgon').toString()