如何将Node.js应用程序部署为单个可执行文件?
假设我已经编写了一个Node.js应用程序,现在我想发布它。当然,我想让用户更容易,因此我不希望他安装Node.js,运行如何将Node.js应用程序部署为单个可执行文件?,node.js,deployment,Node.js,Deployment,假设我已经编写了一个Node.js应用程序,现在我想发布它。当然,我想让用户更容易,因此我不希望他安装Node.js,运行npm install,然后手动键入Node app.js 我更喜欢单一的可执行文件,例如Windows上的.exe文件 我怎样才能做到这一点 我知道,无论如何,这只是关于Windows的。我如何以独立于平台的方式实现这一点?有什么想法吗?最佳做法 完美的解决方案是一个“编译器”,我可以给它一个源文件夹。源文件夹将应用程序本身包含在各种.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目录。在二进制依赖的情况下,在要单独支持的每个平台上执行此步骤非常重要
哪个节点
找到Node.js二进制文件的位置创建自解压存档,支持在解压后立即执行命令的方法,请参阅: 对于OS X/Linux:
您可以使用或之类的工具(我不知道这是否是用默认定义的廉价的自动运行编译的)
这些工具将把归档文件提取到一个临时目录,执行给定的命令(例如,
node app.js
),并在完成后删除所有文件。同时,我找到了(对我来说)完美的解决方案:,它从node.js应用程序(包括其所有模块)创建一个可执行文件
这是理想解决方案的次佳选择。创建安装程序需要经过许多步骤,每个操作系统的安装程序都有所不同。例如:
- 在Mac OS X上,您需要创建一个
,这里有关于如何创建的说明:.pkg
- 在Ubuntu Linux上,您需要创建一个
,这里有关于如何创建的说明:.deb
- 在Microsoft Windows上,您需要创建一个
或.exe
,这里有使用innosetup安装程序的说明:.msi
.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“开箱即用”安装中不是这样)