如何打包和部署Node.js + express Web应用程序?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何打包和部署Node.js + express Web应用程序?相关的知识,希望对你有一定的参考价值。
我是Node.js编程的新手,我最近使用(快速,主干和其他免费视图技术,使用mongoDB)创建了一个示例工作Web应用程序。现在,我想要在暂存环境中部署相同的内容,我不知道如何打包此应用程序并分发相同的内容。 [我可以照顾mongoDb并单独设置]
我来自Java世界,在那里我们为可重用的libs和用于Web应用程序的war / ear包创建jar,它们部署在servlet容器中。现在在这种情况下,因为node.js本身也充当了Web容器,我如何打包我的webapp?
- 是否有使用express构建的打包节点webapps的标准格式/指南? (节点应用程序是否有类似的jar / war包装系统?)
- 打包后如何部署?它会成为一个exe,因为它也是它自己的容器吗?
PS:截至目前,我正在考虑手动将所有必需的源文件复制到登台环境中,并运行npm命令下载该计算机上的所有依赖项,然后使用“forever”或其他一些机制来运行我的server.js。 (另外,添加某种监控,以防app崩溃并永远失败)我不确定这是不是正确的方法?我相信必须有一些标准化的方法来解决这个问题。
没有标准化的方法,但你走在正确的轨道上。如果您的package.json
是最新的且保存完好,您可以将您的app目录复制/压缩/克隆到生产系统,不包括node_modules
。
在你的生产系统上,运行npm install
来安装你的依赖项,npm test
如果你有测试,最后运行NODE_ENV=production node server.js
最近的一些幻灯片我认为非常有用,也包括像永远这样的包装主题,可以找到here。
部署Node.js
应用程序非常容易。在maven,有pom.xml
。 Node.js
中的相关概念是package.json
。您可以在package.json
上声明您的依赖项。您还可以在package.json
上进行环境设置。例如,在开发环境中你可以这么说
我想进行单元测试。
但在生产中;
我想跳过单元测试。
您在.m2
文件夹下有maven的本地存储库。在Node.js中,Node.js项目下有node_modules
文件夹。您可以看到带有名称的模块文件夹。
让我们来看看这个答案的grunt
部分。 Grunt
是您的前端资产的任务管理器,html,javascript,css。例如,在部署之前,您可以缩小html,css,javascript甚至图像。您还可以在grunt
中放置package.json
任务运行函数。
如果您想查看示例应用程序,可以找到示例博客应用程序here。检查文件夹结构和package.json
以供参考。
对于部署,我建议你为启动应用程序部署heroku。你可以找到如何qazxsw poi。这是基于git的简单部署。
在项目运行部分,只需设置您的环境here和NODE_ENV=development
。这里node app.js
在你的项目中。
这是java和nodejs的相对概念;
app.js
=>maven clean install
npm install
文件夹=>.m2
(在项目文件夹下)node_modules
=>mvn test
(关于npm test
的测试部分)package.json
,junit
,... =>powermock
,mocha,...- node-unit =>
Spring MVC
- Express.JS =>
pom.xml
package.json
=>import package
- 是否有使用express构建的打包节点webapps的标准格式/指南? (节点应用程序是否有类似的jar / war包装系统?)
是的,require('module_name')
:
本规范描述了用于分发CommonJS程序和库的CommonJS包格式。 CommonJS包是将模块,代码和其他资产集合整合到一个表单中。它为CommonJS组件的便捷交付,安装和管理提供了基础。
对于您的下一个问题:
2.如何打包后如何部署?它会成为一个exe,因为它也是它自己的容器吗?
我是第二个Hüseyin建议在the CommonJS Packages specification上进行生产。对于开发和暂存,我分别使用Heroku与VirtualBox和Amazon EC2:
该程序采用build-debian-cloud或Debian-VirtualBox-Appliance构建的Debian机器,并将其转换为Node.js“设备”,能够运行通过git部署的Node应用程序。
您的webapp将不会成为Node-Appliance。
希望这可能对寻找解决方案的人有所帮助。可以使用“npm pack”命令完成Node js应用程序的打包。它创建了一个可以在生产/登台环境中运行的应用程序的zip文件。
几种方法来解决这个问题:
- 将您的代码推送到Git存储库,排除不是您的代码(
exe
)的所有内容,然后将其拉到您的暂存环境中,运行node_modules/**
以恢复所有依赖项 - 从中创建一个NPM包,通过
npm install
在您的暂存环境中安装它(这也应该处理所有依赖项) - 手动复制/ ssh文件到您的临时环境(可以使用
npm
自动执行),而不是通过Grunt
恢复您的依赖项
我用了zeit的pkg模块。它可以为linux / win / macos创建跨平台的可交付成果。实际上在生产中使用它并且没有任何问题地工作正常。
它接收所有js脚本并将其打包到一个文件中。
我使用它的原因是因为它有助于保护您的源代码。这种方式在客户环境中的生产中,他们可以访问应用程序而不是源代码。
另外一个优点是,在生产环境中,您实际上不需要让客户安装node.js,因为节点二进制文件也会打包在构建中。
npm
以上是关于如何打包和部署Node.js + express Web应用程序?的主要内容,如果未能解决你的问题,请参考以下文章
如何从部署在 AWS Elastic beanstalk 上的 node.js express 应用程序获取客户端 IP?