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

KBJ*_*KBJ 78 packaging web-deployment node.js express

我是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崩溃并永远失败)我不确定这是不是正确的方法?我相信必须有一些标准化的方法来解决这个问题.

Hüs*_*BAL 88

部署Node.js应用程序非常容易.在maven,有pom.xml.相关概念Node.jspackage.json.您可以声明您的依赖项package.json.您也可以进行环境设置package.json.例如,在开发环境中你可以这么说

我想进行单元测试.

但在生产中;

我想跳过单元测试.

您在.m2文件夹下有maven的本地存储库.在Node.js中,node_modulesNode.js项目下有一个文件夹.您可以看到带有名称的模块文件夹.

让我们来看看grunt这个答案的一部分.Grunt是您的前端资产,HTML,JavaScript,CSS的任务管理器.例如,在部署之前,您可以缩小html,css,javascript甚至图像.您还可以将grunt任务运行功能放入package.json.

如果要查看示例应用程序,可以在此处找到示例博客应用程序.检查文件夹结构并package.json供参考.

对于部署,我建议您使用heroku部署启动应用程序.你可以在这里找到方法.这是基于git的简单部署.

在项目运行部分,只需设置您的环境NODE_ENV=developmentnode app.js.这app.js是你的项目.

这是java和nodejs的相对概念;

  1. maven clean install => npm install
  2. .m2folder => node_modules(在项目文件夹下)
  3. mvn test=> npm test(测试部分package.json)
  4. junit,, powermock... => mocha,node-unit,...
  5. Spring MVC=> Express.JS
  6. pom.xml => package.json
  7. import package => require('module_name')

  • +1,我就像你用Java类比. (10认同)
  • @MikiJ当然,您可以为模块指定版本(依赖项).在package.json中使用语义版本控制,您可以在[这里](https://github.com/npm/node-semver)查看更多详细信息 (2认同)

Mil*_*ous 43

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

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

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

  • 如果我不希望npm从互联网上下载模块怎么办?相反,我想运送包内的所有东西.是否可以发送node_modules文件夹?它有用吗?我问的原因是:我的应用程序可能在Intranet环境中运行,没有Internet连接. (4认同)
  • @Stefan取决于您随附的模块.由于某些不是纯JS的模块需要首先构建,因此将它们移动到不同的环境可能会破坏它们.我还没有到尚未解决这个问题,但也许使用[NPM缓存(https://docs.npmjs.com/cli/cache)提供了与包的完整列表填充缓存一个可行的解决方案,然后再安装(和建筑)从那. (2认同)

Dav*_*aun 6

  1. 是否有使用express构建的打包节点webapps的标准格式/指南?(节点应用程序是否有类似的jar/war包装系统?)

是的,CommonJS包规范:

本规范描述了用于分发CommonJS程序和库的CommonJS包格式.CommonJS包是将模块,代码和其他资产集合整合到一个表单中.它为CommonJS组件的便捷交付,安装和管理提供了基础.

对于您的下一个问题:

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

我是第二个Hüseyin建议在Heroku上部署生产的.对于开发和分期我使用节点设备与VirtualBox和Amazon EC2上,分别为:

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

您的网络应用程序将不会成为exe.


dar*_*uby 5

几种解决方法:

  • 将您的代码推送到Git存储库中,排除所有非您的代码(node_modules/**),然后将其拉入您的暂存环境中,运行npm install以还原所有依赖项

  • 用它创建一个NPM软件包,通过npm在您的登台环境中安装它(这也应该照顾所有依赖项)

  • 手动将文件复制/ ssh文件到暂存环境(可以使用进行自动化Grunt),然后通过npm


小智 5

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