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

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

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

我该怎么做呢?

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

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

哦,还有一点很重要: 我不想对源代码进行 任何更改,所以使用相对路径调用 require应该仍然可以工作,即使这个相对路径现在位于打包的应用程序中。

有什么想法吗?

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

135377 次浏览

您可以创建一个 git repo,并作为一个依赖项设置到节点 git 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 应用程序,这样可以方便地让一个应用程序“刚刚运行”,而不需要终端用户关心安装和依赖性。

您可以尝试以下设置:

  1. 获取应用程序源代码
  2. npm install本地 node _ module 目录的所有依赖项(通过 package.json)。如果存在二进制依赖关系,在希望单独支持的每个平台上执行此步骤非常重要。
  3. 将 Windows 上的 Node.js 二进制文件 -Node Exe,(可能) OS X/Linux 上的 /usr/local/bin/node复制到项目的根文件夹。在 OS X/Linux 上,您可以通过 which node找到 Node.js 二进制文件的位置。

视窗:
创建一个自解压存档,7zip _ 汗支持在解压后立即执行命令的方法,请参见: http://www.msfn.org/board/topic/39048-how-to-make-a-7-zip-switchless-installer/

对于 OS X/Linux:
您可以使用诸如 化妆解开拉链之类的工具(我不知道这是否使用默认定义的 CHEAP _ SFX _ AUTORUN 编译)。

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

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

这是仅次于理想溶液的最佳方案。

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

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

我不是在白费口舌,但是你所描述的解决方案听起来很像 Node-Webkit

来自 Git 页面:

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

这些指令 特别详细地描述了用户可以执行的单个文件应用程序的创建,而 这一部分描述了外部依赖关系。

我不确定这是不是正确的解决方案,但看起来很接近了。

希望能有帮助!

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

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

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

它非常容易使用,我已经在 Windows 8.1和 Ubuntu 14.04中测试过了。

供参考: JXcore 是 NodeJS 的一个分支,因此它100% 兼容 NodeJS,还有一些额外的特性。