如何将Node.js应用程序部署为单个可执行文件?
假设我已经写了一个Node.js应用程序,现在我想分发它。 当然,我想让用户容易,因此我不希望他安装Node.js,运行npm install
,然后手动inputnode app.js
我更喜欢一个单一的可执行文件,例如Windows上的.exe
文件。
我怎么能这样做?
我知道这个线程 ,反正这只是关于Windows。 我怎样才能以平台无关的方式实现这一点? 有任何想法吗? 最佳实践? …?
完美的解决scheme是我可以给一个源文件夹的“编译器”。 源文件夹包含各种.js
文件中的应用程序本身, node_modules
文件夹和一些元数据(如package.json
。 输出应该是各种平台的二进制文件,如Windows,OS X和Linux。
呵呵,什么是重要的:我不想对源代码做任何改变,所以即使这个相对path现在在打包的应用程序中,调用相对path也require
工作。
有任何想法吗?
PS:我不希望用户独立安装Node.js,它也应该包含在可执行文件中。
同时,我发现(对我来说)完美的解决scheme: nexe ,它从一个包含所有模块的Node.js应用程序创build一个单一的可执行文件。
尽pipe目前它有一些缺点(不能在Windows上运行,并且不支持二进制模块),但它是理想解决scheme的下一个最好的事情。
首先,我们正在讨论打包一个Node.js应用程序的研讨会,演示等,它可以很方便地让应用程序“只是运行”,而不需要最终用户关心安装和依赖关系。
您可以尝试以下设置:
- 获取您的应用程序源代码
-
npm install
所有依赖项(通过package.json)npm install
到本地 node_modules目录。 在二进制依赖关系的情况下,在每个想要单独支持的平台上执行这一步是非常重要的。 - 将Windows上的Node.js二进制文件(可能是) / OS X / Linux上的/ usr / local / bin / node复制到项目的根文件夹中。 在OS X / Linux上,您可以find与
which node
的Node.js二进制文件的位置。
对于Windows:
创build一个自解压存档, 7zip_extra支持在解压后立即执行命令的方法,请参阅: http : //www.msfn.org/board/topic/39048-how-to-make-a-7-zip-switchless- 安装程序/ 。
对于OS X / Linux:
你可以使用像makeself或unzipsfx这样的工具(我不知道这是否使用默认定义的CHEAP_SFX_AUTORUN进行编译)。
这些工具将提取存档到临时目录,执行给定的命令(例如node app.js
)并在完成时删除所有文件。
不要打死马,但是你描述的解决scheme听起来很像Node-Webkit 。
从Git页面:
node-webkit是基于Chromium和node.js的应用程序运行时。 您可以使用node-webkit在HTML和JavaScript中编写本机应用程序。 它还使您可以直接从DOM调用Node.js模块,并支持使用所有Web技术编写本地应用程序的新方法。
这些指令详细说明了用户可以执行的单个文件应用程序的创build过程, 这部分描述了外部依赖关系。
我不确定这是否是确切的解决scheme,但看起来非常接近。
希望能帮助到你!
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.04testing。
仅供参考:JXcore是NodeJS的一个分支,所以它是100%的NodeJS兼容的,有一些额外的function。
除了nexe之外, browserify可以用来将所有的依赖关系打包成一个.js
文件。 这不捆绑实际的节点可执行文件,只是处理JavaScript的一面。 它也不处理本地模块。 纯节点编译的命令行选项是browserify --output bundle.js --bare --dg false input.js
。
您需要经过许多步骤才能创build安装程序,并且每个操作系统都有所不同。 例如:
- 在Mac OS X上,您需要创build一个
.pkg
,有关于如何在此处执行操作的说明: https : //coolaj86.com/articles/how-to-create-an-osx-pkg-installer.html - 在Ubuntu Linux上,你需要创build一个
.deb
,这里有如何做到这一点的说明: https : //coolaj86.com/articles/how-to-create-a-debian-installer.html - 在Microsoft Windows上,您需要创build一个
.exe
或.msi
,这里有如何使用innosetup安装程序的说明: https ://coolaj86.com/articles/how-to-create-an-innosetup-installer.html
我尝试着使用自己,并取得了成功。 没有问题呢。 logging的步骤@ https://www.linkedin.com/pulse/article/deploying-nodejs-single-executableruntime-amit-gupta
你可以创build一个git仓库,并build立一个到git仓库的链接作为依赖。 然后任何克隆回购的用户也可以安装节点。
#git submodule [--quiet] add [-b branch] [-f|--force] git submodule add /var/Node-repo.git common
你可以轻松地打包一个脚本来自动克隆你在某个地方托pipe的git仓库,并从一个脚本文件中“安装”。
#!/bin/sh #clone git repo git clone your-repo.git