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

时间:2013-01-14 06:14:14

标签: node.js deployment

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

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

我怎么能接近这个?

我知道this thread,无论如何这只是关于Windows。我怎样才能以独立于平台的方式实现这一目标?有任何想法吗?最佳做法? ...?

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

哦,重要的是:我不想对源代码进行任何更改,因此使用相对路径调用require仍应有效,即使此相对路径为现在在打包的应用程序中。

有什么想法吗?

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

8 个答案:

答案 0 :(得分:56)

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

这是理想解决方案的下一个最佳选择。

答案 1 :(得分:31)

首先,我们讨论的是为研讨会,演示等打包Node.js应用程序,以便让应用程序“正常运行”而不需要最终用户关心安装和依赖性。

您可以尝试以下设置:

  1. 获取您的应用源代码
  2. npm install所有依赖项(通过package.json)到本地 node_modules目录。在二进制依赖的情况下,在要分别支持的每个平台上执行此步骤非常重要。
  3. 将Windows上的Node.js二进制文件 - node.exe ,(可能)在OS X / Linux上的 / usr / local / bin / node 复制到项目的根目录夹。在OS X / Linux上,您可以使用which node找到Node.js二进制文件的位置。
  4. 适用于Windows:
    创建自解压存档,7zip_extra支持在提取后立即执行命令的方法,请参阅:http://www.msfn.org/board/topic/39048-how-to-make-a-7-zip-switchless-installer/

    对于OS X / Linux:
    您可以使用makeselfunzipsfx等工具(我不知道这是否是使用默认定义的CHEAP_SFX_AUTORUN编译的。)

    这些工具会将存档解压缩到临时目录,执行给定的命令(例如node app.js)并在完成后删除所有文件。

答案 2 :(得分:15)

不要打败死马,但你所描述的解决方案听起来很像Node-Webkit

来自Git页面:

  

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

These instructions具体详细说明了用户可以执行的单个文件应用程序的创建,this portion描述了外部依赖项。

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

希望它有所帮助!

答案 3 :(得分:8)

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

以下是安装程序的链接: https://github.com/jxcore/jxcore-release

这是一个如何设置它的链接: http://jxcore.com/turn-node-applications-into-executables/

它非常易于使用,我在Windows 8.1和Ubuntu 14.04中都进行了测试。

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

答案 4 :(得分:6)

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

答案 5 :(得分:5)

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

答案 6 :(得分:1)

我尝试使用makeself并且成功了。还没有问题。记录的步骤@ https://www.linkedin.com/pulse/article/deploying-nodejs-single-executableruntime-amit-gupta

答案 7 :(得分:0)

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

#git submodule [--quiet] add [-b branch] [-f|--force]
git submodule add /var/Node-repo.git common

您可以轻松打包脚本以自动克隆您在某处托管的git仓库,并从一个脚本文件中“安装”。

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