如何将Node.js应用程序部署为单个可执行文件?

如何将Node.js应用程序部署为单个可执行文件?,node.js,deployment,Node.js,Deployment,假设我已经编写了一个Node.js应用程序,现在我想发布它。当然,我想让用户更容易,因此我不希望他安装Node.js,运行npm install,然后手动键入Node app.js 我更喜欢单一的可执行文件,例如Windows上的.exe文件 我怎样才能做到这一点 我知道,无论如何,这只是关于Windows的。我如何以独立于平台的方式实现这一点?有什么想法吗?最佳做法 完美的解决方案是一个“编译器”,我可以给它一个源文件夹。源文件夹将应用程序本身包含在各种.js文件、节点模块文件夹和一些元数据中

假设我已经编写了一个Node.js应用程序,现在我想发布它。当然,我想让用户更容易,因此我不希望他安装Node.js,运行
npm install
,然后手动键入
Node app.js

我更喜欢单一的可执行文件,例如Windows上的
.exe
文件

我怎样才能做到这一点

我知道,无论如何,这只是关于Windows的。我如何以独立于平台的方式实现这一点?有什么想法吗?最佳做法

完美的解决方案是一个“编译器”,我可以给它一个源文件夹。源文件夹将应用程序本身包含在各种
.js
文件、
节点模块
文件夹和一些元数据中,例如
包.json
。输出应该是各种平台的二进制文件,如Windows、OS X和Linux

哦,还有一点很重要:我不想对源代码做任何更改,因此使用相对路径调用
require
应该仍然有效,即使这个相对路径现在在打包的应用程序中

有什么想法吗


PS:我不希望用户独立安装Node.js,它也应该包含在可执行文件中。

您可以创建一个git repo,并将指向节点git repo的链接设置为依赖项。然后,克隆repo的任何用户也可以安装节点

#git submodule [--quiet] add [-b branch] [-f|--force]
git submodule add /var/Node-repo.git common
您可以轻松地打包一个脚本,自动克隆您在某处托管的git repo,并从一个脚本文件“安装”

#!/bin/sh
#clone git repo
git clone your-repo.git

首先,我们正在讨论为研讨会、演示等打包一个Node.js应用程序。在这里,让一个应用程序“刚刚运行”很方便,而不需要最终用户关心安装和依赖关系

您可以尝试以下设置:

  • 获取你的应用程序源代码
  • npm将所有依赖项(通过package.json)安装到localnode\u modules目录。在二进制依赖的情况下,在要单独支持的每个平台上执行此步骤非常重要
  • 将Windows上的Node.js binary–Node.exe(可能是)/usr/local/bin/Node(在OS X/Linux上)复制到项目的根文件夹中。在OS X/Linux上,您可以通过
    哪个节点
    找到Node.js二进制文件的位置
  • 适用于Windows:
    创建自解压存档,支持在解压后立即执行命令的方法,请参阅:

    对于OS X/Linux:
    您可以使用或之类的工具(我不知道这是否是用默认定义的廉价的自动运行编译的)


    这些工具将把归档文件提取到一个临时目录,执行给定的命令(例如,
    node app.js
    ),并在完成后删除所有文件。

    同时,我找到了(对我来说)完美的解决方案:,它从node.js应用程序(包括其所有模块)创建一个可执行文件


    这是理想解决方案的次佳选择。

    创建安装程序需要经过许多步骤,每个操作系统的安装程序都有所不同。例如:

    • 在Mac OS X上,您需要创建一个
      .pkg
      ,这里有关于如何创建的说明:
    • 在Ubuntu Linux上,您需要创建一个
      .deb
      ,这里有关于如何创建的说明:
    • 在Microsoft Windows上,您需要创建一个
      .exe
      .msi
      ,这里有使用innosetup安装程序的说明:

    除了nexe之外,还可以将所有依赖项打包为一个
    .js
    文件。这并不捆绑实际的节点可执行文件,只处理javascript端。它也不处理本机模块。纯节点编译的命令行选项将是
    browserify--output bundle.js--bare--dg false input.js

    ,这并不是为了击败一匹死马,但您描述的解决方案听起来很像

    从Git页面:

    node webkit是基于Chromium和node.js的应用程序运行时。您可以使用node webkit以HTML和JavaScript编写本机应用程序。它还允许您直接从DOM调用Node.js模块,并支持使用所有Web技术编写本机应用程序的新方法

    特别详细说明了用户可以执行的单个文件应用程序的创建,并描述了外部依赖关系

    我不确定这是否是确切的解决方案,但似乎非常接近


    希望有帮助

    JXcore将允许您将任何nodejs应用程序转换为单个可执行文件,包括Windows、Linux或Mac OS X中的所有依赖项

    以下是指向安装程序的链接:

    下面是如何设置它的链接:

    它非常容易使用,我已经在Windows8.1和Ubuntu 14.04中对它进行了测试


    仅供参考:JXcore是NodeJ的分支,因此它100%兼容NodeJ,并具有一些额外的功能。

    这是一个Web应用程序吗?(意思是说有一个基于web的UI)或者一个更简单的命令行应用程序来做其他事情?如果需要生成某种浏览器,我怀疑这会变得更加困难。以这种方式部署到unix操作系统的node.js社区成员数:零。您确定像tar归档、deb或rpm这样久经考验的方法对您来说是不可接受的吗?你是在发明一个不存在的问题来解决吗?@Alex Wayne:这是一个服务器端应用程序,因此不需要启动浏览器。PS:此外,我的问题包括是否有一个工具可以用于为任何平台创建解决方案,所以即使是自动为Windows创建.exe文件和.deb文件的工具也很棒;-)@彼得里昂,我觉得很难相信。我也可以证明这一点,但这将为您提供源存储库,而不是二进制文件。用户仍然需要编译Node.js,因为这样做的所有依赖项都已经存在(在Windows/OS X“开箱即用”安装中不是这样)