假设我已经编写了一个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,它也应该包含在可执行文件中。
答案 0 :(得分:56)
与此同时,我找到了(对我来说)完美的解决方案:nexe,它从Node.js应用程序创建一个可执行文件,包括其所有模块。
这是理想解决方案的下一个最佳选择。
答案 1 :(得分:31)
首先,我们讨论的是为研讨会,演示等打包Node.js应用程序,以便让应用程序“正常运行”而不需要最终用户关心安装和依赖性。
您可以尝试以下设置:
npm install
所有依赖项(通过package.json)到本地 node_modules目录。在二进制依赖的情况下,在要分别支持的每个平台上执行此步骤非常重要。which node
找到Node.js二进制文件的位置。 适用于Windows:
创建自解压存档,7zip_extra支持在提取后立即执行命令的方法,请参阅:http://www.msfn.org/board/topic/39048-how-to-make-a-7-zip-switchless-installer/。
对于OS X / Linux:
您可以使用makeself或unzipsfx等工具(我不知道这是否是使用默认定义的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)
创建安装程序需要执行许多步骤,并且每个操作系统都有所不同。例如:
.pkg
,这里有关于如何做到这一点的说明:https://coolaj86.com/articles/how-to-create-an-osx-pkg-installer.html .deb
,这里有关于如何做到这一点的说明:https://coolaj86.com/articles/how-to-create-a-debian-installer.html .exe
或.msi
,有关如何使用innosetup安装程序的说明:https://coolaj86.com/articles/how-to-create-an-innosetup-installer.html 答案 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