如何打包和部署Node.js + express web应用程序?

我是Node.js编程的新手,最近我创build了一个使用(express,backbone和其他免费的视图技术,使用mongoDB)的示例工作Web应用程序。 现在我正想要在临时环境中部署相同的程序,我不确定如何打包此应用程序并分发它。 [我可以照顾mongoDb并单独设置]

我来自Java世界,在那里我们为部署在servlet容器中的web应用程序创build可重用的libs和war / ear包的jar。 现在在这种情况下,因为node.js本身也是一个Web容器,所以如何打包我的webapp呢?

  1. 包装节点webapps是否有使用express构build的标准格式/指南? (有没有类似的jar / war包装系统的节点应用程序?)
  2. 打包后如何部署? 它会成为一个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文件夹。 你可以看到模块文件夹的名字。

让我们来回答这个问题的gruntGrunt是您前端资产的任务pipe理器,html,javascript,css。 例如,在部署之前,您可以缩小html,css,javascript甚至图像。 你也可以在package.json grunt任务运行函数。

如果你想看一个示例应用程序,你可以在这里find一个示例博客应用程序。 检查文件夹结构和package.json以供参考。

对于部署,我build议你启动应用程序的heroku部署。 你可以在这里find如何。 这是简单的基于git的部署。

在项目运行部分,只需设置你的环境NODE_ENV=developmentnode app.js NODE_ENV=development 这里app.js在你的项目中。

这里是java和nodejs的相对概念;

  1. maven clean install => npm install
  2. .m2文件夹=> node_modules (在项目文件夹下)
  3. mvn test => npm testpackage.jsontesting部分)
  4. junitpowermock ,… => 摩卡 , 节点单元 ,…
  5. Spring MVC => Express.JS
  6. pom.xml => package.json
  7. import package => require('module_name')
  1. 包装节点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恢复你的依赖关系