当前位置: 首页 > news >正文

Node.js:开发和生产之间的区别

Node.js 中的开发和生产没有区别,即,你无需应用任何特定设置即可使 Node.js 在生产配置中工作。但是,npm 注册表中的一些库会识别使用 NODE_ENV 变量并将其默认为 development 设置。始终在设置了 NODE_ENV=production 的情况下运行 Node.js。

一、Express 中的 NODE_ENV

在广受欢迎的 express 框架中,将 NODE_ENV 设置为 production 通常可确保:

  • 日志记录保持在最低限度,基本级别
  • 更多缓存级别用于优化性能

这通常是通过执行命令来完成的

export NODE_ENV=production

在 shell 中,但最好将其放在 shell 配置文件中(例如,带有 Bash shell 的 .bash_profile),否则在系统重启的情况下设置不会保留。

你也可以通过将其添加到应用初始化命令的前面来应用环境变量:

NODE_ENV=production node app.js

例如,在 Express 应用中,你可以使用它为每个环境设置不同的错误处理程序:

if (process.env.NODE_ENV === 'development') {app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
}if (process.env.NODE_ENV === 'production') {app.use(express.errorHandler());
}

例如,如果 NODE_ENV 未设置为 production,则 Express 使用的模板库 Pug 会在调试模式下编译。在开发模式下,Express 视图在每个请求中都会进行编译,而在生产中,它们会被缓存。还有更多示例。

此环境变量是外部库中广泛使用的约定,但不在 Node.js 本身内使用。

二、为什么 NODE_ENV 被视为反模式?

环境是一个数字平台或系统,工程师可以在其中构建、测试、部署和管理软件产品。通常,我们的应用运行的环境有四个阶段或类型:

  • 开发
  • 测试
  • 准备
  • 生产

NODE_ENV 的根本问题源于开发者将优化和软件行为与其软件运行的环境相结合。结果是如下代码:

if (process.env.NODE_ENV === 'development') {// ...
}if (process.env.NODE_ENV === 'production') {// ...
}if (['production', 'staging'].includes(process.env.NODE_ENV)) {// ...
}

在这里插入图片描述

虽然这看起来无害,但它使生产和登台环境不同,从而使可靠的测试变得不可能。例如,当 NODE_ENV 设置为 development 时,测试以及产品的功能可能会通过,但当将 NODE_ENV 设置为 production 时会失败。因此,将 NODE_ENV 设置为 production 以外的任何值都被视为反模式。

http://www.lryc.cn/news/494775.html

相关文章:

  • 【QT】背景,安装和介绍
  • 从0到1搭建webpack
  • 针对解决conda环境BUG的个人笔记
  • 读《Effective Java》笔记 - 条目13
  • SQL 之连接查询
  • vscode切换anaconda虚拟环境解释器不成功
  • 一个实用的 Maven localRepository 工具
  • 目标检测,图像分割,超分辨率重建
  • 微信小程序 城市点击后跳转 并首页显示被点击城市
  • Linux - nfs服务器
  • uniapp图片上传预览uni.chooseImage、uni.previewImage
  • C++ 字符串中数字识别
  • 学术中常见理论归纳总结-不定期更新
  • ModelSim怎么修改字体及大小
  • 图片预处理技术介绍4——降噪
  • Scrapy管道设置和数据保存
  • D84【python 接口自动化学习】- pytest基础用法
  • 如何正确书写sh文件/sh任务?bash任务
  • 多线程篇-5--线程分类(线程类型,springboot中常见线程类型,异步任务线程)
  • docker快速部署gitlab
  • C# 数据类型详解:掌握数据类型及操作为高效编码奠定基础
  • burp2
  • [ACTF2020 新生赛]BackupFile--详细解析
  • 循环神经网络(RNN)简述
  • 九、Ubuntu Linux操作系统
  • SpringBoot 新冠密接者跟踪系统:校园疫情防控的智能守护者
  • 【Ubuntu】E: Unable to locate package xxx
  • vue多页面应用集成时权限处理问题
  • Socket编程(TCP/UDP详解)
  • qt QConicalGradient详解