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

时间:2014-01-21 13:12:53

标签: node.js express web-deployment packaging

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

我来自Java世界,在那里我们为可重用的libs和用于Web应用程序的war / ear包创建jar,它们部署在servlet容器中。现在在这种情况下,因为node.js本身也充当了Web容器,我如何打包我的webapp?

  1. 是否有使用express构建的打包节点webapps的标准格式/指南? (节点应用程序是否有类似的jar / war包装系统?)
  2. 如何打包后如何部署?它会成为一个exe,因为它也是它自己的容器吗?
  3. PS:截至目前,我正在考虑手动将所有必需的源文件复制到登台环境中,并运行npm命令下载该计算机上的所有依赖项,然后使用“forever”或其他一些机制来运行我的服务器。 JS。 (另外,添加某种监控,以防app崩溃并永远失败)我不确定这是不是正确的方法?我确信必须有一些标准化的方法来解决这个问题。

6 个答案:

答案 0 :(得分:86)

部署Node.js应用程序非常简单。在maven中,有pom.xmlNode.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部署启动应用程序。你可以找到如何here。这是基于git的简单部署。

在项目运行部分,只需设置您的环境NODE_ENV=developmentnode app.js即可。此处app.js位于您的项目中。

这是java和nodejs的相对概念;

  1. maven clean install => npm install
  2. .m2 folder => node_modules(在项目文件夹下)
  3. mvn test => npm testpackage.json上的测试部分)
  4. junitpowermock,... => mochanode-unit,...
  5. Spring MVC => Express.JS
  6. pom.xml => package.json
  7. import package => require('module_name')

答案 1 :(得分:39)

没有标准化的方法,但你走在正确的轨道上。如果您的package.json是最新且保存完好的,您只需将您的应用目录复制/压缩/克隆到生产系统,node_modules除外。

在您的生产系统上运行 npm install安装您的依赖项,npm test如果您有测试,最后NODE_ENV=production node server.js

最近的一些幻灯片我认为非常有帮助,也包括像永远这样的包装主题,可以找到here

答案 2 :(得分:6)

  
      
  1. 是否有任何包装节点webapps的标准格式/指南   建使用快递? (是否有类似的罐子/战争包装系统   节点应用程序?)
  2.   

是的,the CommonJS Packages specification

  

本规范描述了CommonJS包格式   分发CommonJS程序和库。 CommonJS包是一个   包含模块,代码和其他资产的集合   成一个单一的形式。它提供了方便交付的基础,   安装和管理CommonJS组件。

下一个问题:

  

2。打包后如何部署?它会成为一个exe,因为它也是它自己的容器吗?

我是第二个Hüseyin建议在Heroku部署生产。对于开发和登台,我分别使用Node-Appliance与VirtualBox和Amazon EC2:

  

这个程序采用build-debian-cloud或者构建的Debian机器   Debian-VirtualBox-Appliance并将其转换为Node.js“设备”,   能够运行通过git部署的Node应用程序。

您的网络应用不会成为exe

答案 3 :(得分:5)

希望这对寻找解决方案的人可能有所帮助,可以使用“ npm pack”命令打包Node js应用程序。它会为您的应用程序创建一个zip文件,该文件可以在生产/登台环境中运行。

答案 4 :(得分:4)

很少有办法解决这个问题:

  • 将您的代码推送到Git存储库,排除不是您的代码(node_modules/**)的所有内容,然后将其拉到您的暂存环境中,运行npm install以恢复所有依赖项

  • 从中创建一个NPM包,通过npm在您的临时环境中安装它(这也应该处理所有依赖项)

  • 手动复制/ ssh文件到您的登台环境(这可以通过Grunt自动完成),而不是通过npm

  • 恢复您的依赖关系

答案 5 :(得分:0)

我使用了zeit的pkg模块。它可以为linux / win / macos创建跨平台可交付成果。实际上已在生产中使用它,并且工作正常,没有任何问题。

它接收所有js脚本并将其打包到一个文件中。

我之所以使用它,是因为它有助于保护您的源代码。这样,在客户环境下的生产中,他们将可以访问应用程序,但不能访问源代码。

优点之一是,在生产环境中,您实际上不需要让客户安装node.js,因为节点二进制文件也被打包在内部版本中。

https://www.npmjs.com/package/pkg