繁体   English   中英

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

[英]How to package & deploy Node.js + express web application?

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

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

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

PS:到目前为止,我只想手动将所有必需的源文件复制到暂存环境中,然后运行 ​​npm 命令来下载该机器上的所有依赖项,然后使用“永远”或其他一些机制来运行我的 server.js。 (另外,添加某种监控,以防应用程序崩溃并永远失败)我不确定这是否正确? 我确信必须有一些标准化的方法来解决这个问题。

部署Node.js应用程序非常简单。 在 maven 中,有pom.xml Node.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

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

对于部署,我建议您为启动应用程序进行 heroku 部署。 您可以在此处找到操作方法。 这是简单的基于 git 的部署。

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

这是java和nodejs的相对概念;

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

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

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

我认为最近的一些幻灯片非常有帮助,其中还包括像永远这样的包装器主题,可以在这里找到。

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

是的, CommonJS 包规范

本规范描述了用于分发 CommonJS 程序和库的 CommonJS 包格式。 CommonJS 包是将模块、代码和其他资产的集合紧密地包装成单个形式。 它为CommonJS组件的便捷交付、安装和管理提供了基础。

对于您的下一个问题:

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

我支持 Hüseyin 的建议,即部署在Heroku 上进行生产。 对于开发和登台,我分别将Node-Appliance与 VirtualBox 和 Amazon EC2 结合使用:

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

您的 webapp 不会成为exe

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

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

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

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

  • 手动复制/ssh 文件到您的临时环境(这可以通过Grunt自动完成),而不是通过npm恢复您的依赖项

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM