141

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

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

我怎么能接近这个?

我知道这个线程,无论如何这只是关于 Windows。我怎样才能以独立于平台的方式实现这一点?有任何想法吗?最佳实践?...?

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

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

有任何想法吗?

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

4

7 回答 7

68

同时,我找到了(对我而言)完美的解决方案:nexe,它从包含所有模块的 Node.js 应用程序创建单个可执行文件。

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

于 2013-08-13T16:22:47.527 回答
31

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

您可以尝试以下设置:

  1. 获取您的应用程序源代码
  2. npm install所有依赖项(通过 package.json)到本地node_modules 目录。在二进制依赖的情况下,在您要单独支持的每个平台上执行此步骤非常重要。
  3. 将 Node.js 二进制文件——Windows 上的node.exe,(可能) OS X/Linux 上的/usr/local/bin/node复制到项目的根文件夹。在 OS X/Linux 上,您可以使用which node.

对于 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)并在完成后删除所有文件。

于 2013-01-30T10:30:41.830 回答
15

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

从 Git 页面:

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

这些说明特别详细说明了用户可以执行的单个文件应用程序的创建,这部分描述了外部依赖项。

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

希望能帮助到你!

于 2014-06-23T21:59:38.190 回答
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 的一个分支,因此它与 NodeJS 100% 兼容,并具有一些额外的功能。

于 2015-02-10T20:08:45.177 回答
7

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

于 2013-09-09T17:08:00.297 回答
7

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

于 2014-05-15T19:03:38.843 回答
-1

您可以创建一个 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
于 2013-01-17T04:14:28.050 回答