如何打包和部署Node.js + express web应用程序?
我是Node.js编程的新手,最近我创build了一个使用(express,backbone和其他免费的视图技术,使用mongoDB)的示例工作Web应用程序。 现在我正想要在临时环境中部署相同的程序,我不确定如何打包此应用程序并分发它。 [我可以照顾mongoDb并单独设置]
我来自Java世界,在那里我们为部署在servlet容器中的web应用程序创build可重用的libs和war / ear包的jar。 现在在这种情况下,因为node.js本身也是一个Web容器,所以如何打包我的webapp呢?
- 包装节点webapps是否有使用express构build的标准格式/指南? (有没有类似的jar / war包装系统的节点应用程序?)
- 打包后如何部署? 它会成为一个exe,因为它也是它自己的容器?
PS:到目前为止,我正在考虑将所有必需的源文件手动复制到临时环境中,并运行npm命令来下载该机器上的所有依赖项,然后使用“forever”或其他一些机制来运行我的server.js。 (另外,添加一些监控,以防万一程序崩溃,永远失败)我不知道这是正确的方式吗? 我确信必须有一些解决这个问题的标准化方法。
没有标准化的方法,但是你走的是正确的道路。 如果你的package.json
是最新的,并且保存的很好,你可以复制/压缩/克隆你的app目录到生产系统,不包括node_modules
。
在您的生产系统上,运行npm install
来安装依赖关系, npm test
如果有testing,则testing,最后NODE_ENV=production node server.js
一些最近的幻灯片,我认为是相当有帮助的,也包括像永远包装的话题,可以在这里find。
部署Node.js
应用程序非常简单。 在maven中,有pom.xml
。 在Node.js
相关概念是package.json
。 你可以在package.json
声明你的依赖关系。 您也可以在package.json
上进行环境设置。 例如,在开发环境中,你可以这样说
我想运行unit testing。
但在生产中;
我想跳过unit testing。
.m2
文件夹下有maven的本地存储库。 在Node.js中,Node.js项目下有node_modules
文件夹。 你可以看到模块文件夹的名字。
让我们来回答这个问题的grunt
。 Grunt
是您前端资产的任务pipe理器,html,javascript,css。 例如,在部署之前,您可以缩小html,css,javascript甚至图像。 你也可以在package.json
grunt
任务运行函数。
如果你想看一个示例应用程序,你可以在这里find一个示例博客应用程序。 检查文件夹结构和package.json
以供参考。
对于部署,我build议你启动应用程序的heroku部署。 你可以在这里find如何。 这是简单的基于git的部署。
在项目运行部分,只需设置你的环境NODE_ENV=development
和node app.js
NODE_ENV=development
这里app.js
在你的项目中。
这里是java和nodejs的相对概念;
-
maven clean install
=>npm install
-
.m2
文件夹=>node_modules
(在项目文件夹下) -
mvn test
=>npm test
(package.json
testing部分) -
junit
,powermock
,… => 摩卡 , 节点单元 ,… -
Spring MVC
=> Express.JS -
pom.xml
=>package.json
-
import package
=>require('module_name')
- 包装节点webapps是否有使用express构build的标准格式/指南? (有没有类似的jar / war包装系统的节点应用程序?)
是的, CommonJS软件包规范 :
本规范描述了用于分发CommonJS程序和库的CommonJS包格式。 CommonJS软件包是将模块,代码和其他资产集合在一起形成一个整体。 它为CommonJS组件的方便交付,安装和pipe理提供了基础。
对于你的下一个问题:
2.如何在打包后部署? 它会成为一个exe,因为它也是它自己的容器?
我第二个侯赛因的build议部署在Heroku生产。 对于开发和分期,我分别使用带有VirtualBox和Amazon EC2的Node-Appliance :
这个程序需要一个由build-debian-cloud或者Debian-VirtualBox-Appliance构build的Debian机器,并把它变成一个Node.js“装置”,能够运行通过git部署的Node应用程序。
你的web应用程序不会成为一个exe
。
几种方法来处理这个问题:
-
将代码推送到Git存储库中,排除不是您的代码的所有内容(
node_modules/**
),然后将其放入暂存环境中,运行npm install
以还原所有依赖关系 -
创build一个NPM包,通过
npm
在你的登台环境中安装它(这也应该照顾所有的依赖关系) -
手动复制/ ssh文件到你的临时环境(这可以通过
Grunt
自动执行),而不是通过npm
恢复你的依赖关系