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

问题描述 投票:71回答:6

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

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

  1. 是否有使用express构建的打包节点webapps的标准格式/指南? (节点应用程序是否有类似的jar / war包装系统?)
  2. 打包后如何部署?它会成为一个exe,因为它也是它自己的容器吗?

PS:截至目前,我正在考虑手动将所有必需的源文件复制到登台环境中,并运行npm命令下载该计算机上的所有依赖项,然后使用“forever”或其他一些机制来运行我的server.js。 (另外,添加某种监控,以防app崩溃并永远失败)我不确定这是不是正确的方法?我相信必须有一些标准化的方法来解决这个问题。

node.js express web-deployment packaging
6个回答
40
投票

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

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

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


87
投票

部署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。你可以找到如何qazxsw poi。这是基于git的简单部署。

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

这是java和nodejs的相对概念;

  1. app.js => maven clean install
  2. npm install文件夹=> .m2(在项目文件夹下)
  3. node_modules => mvn test(关于npm test的测试部分)
  4. package.jsonjunit,... => powermockmocha,...
  5. node-unit => Spring MVC
  6. Express.JS => pom.xml
  7. package.json => import package

6
投票
  1. 是否有使用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


5
投票

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


4
投票

几种方法来解决这个问题:

  • 将您的代码推送到Git存储库,排除不是您的代码(exe)的所有内容,然后将其拉到您的暂存环境中,运行node_modules/**以恢复所有依赖项
  • 从中创建一个NPM包,通过npm install在您的暂存环境中安装它(这也应该处理所有依赖项)
  • 手动复制/ ssh文件到您的临时环境(可以使用npm自动执行),而不是通过Grunt恢复您的依赖项

0
投票

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

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

我使用它的原因是因为它有助于保护您的源代码。这种方式在客户环境中的生产中,他们可以访问应用程序而不是源代码。

另外一个优点是,在生产环境中,您实际上不需要让客户安装node.js,因为节点二进制文件也会打包在构建中。

npm

© www.soinside.com 2019 - 2024. All rights reserved.