![](/img/trans.png)
[英]How to deploy node.js application and node.js express applicaion on IIS
[英]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 应用程序?
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=development
和node app.js
。 这里app.js
在你的项目中。
这是java和nodejs的相对概念;
maven clean install
npm install
=> npm install
.m2
文件夹 => node_modules
(在项目文件夹下)mvn test
=> npm test
( package.json
上的测试部分)junit
, powermock
, ... => mocha , node-unit , ...Spring MVC
=> Express.JSpom.xml
=> package.json
import package
=> require('module_name')
没有标准化的方法,但您走在正确的轨道上。 如果您的package.json
是最新的并且保存完好,您只需将您的应用程序目录复制/压缩/克隆到生产系统,不包括node_modules
。
在你的生产系统上,运行npm install
来安装你的依赖项, npm test
如果你有测试,最后NODE_ENV=production node server.js
我认为最近的一些幻灯片非常有帮助,其中还包括像永远这样的包装器主题,可以在这里找到。
- 是否有使用 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,因为节点二进制文件也会打包在构建中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.