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 以外的任何值都被视为反模式。

相关推荐
若惜5 分钟前
selenium自动化测试web自动化测试 框架封装Pom
前端·python·selenium
Amumu1213818 分钟前
Js:内置对象
开发语言·前端·javascript
广州华水科技20 分钟前
2026年单北斗GNSS变形监测系统推荐,助力精准监控与智慧城市建设
前端
鸡吃丸子24 分钟前
如何编写一个高质量的AI Skill
前端·ai
我命由我1234535 分钟前
Element Plus 2.2.27 的单选框 Radio 组件,选中一个选项后,全部选项都变为选中状态
开发语言·前端·javascript·html·ecmascript·html5·js
Luna-player37 分钟前
第3章 Spring Boot的Web应用支持,个人学习笔记
前端·spring boot·学习
bugcome_com38 分钟前
【ASP.NET Web Pages】页面布局核心实战:从复用性到安全性,打造一致化网站界面
前端·后端·asp.net
Sylus_sui38 分钟前
Class 模型 + 跨组件状态(@Observed)+ 网络请求封装 + 本地存储全部是鸿蒙 Next/Stage 模型标准写法
前端
代码栈上的思考41 分钟前
消息队列持久化:文件存储设计与实现全解析
java·前端·算法
踩着两条虫1 小时前
去“AI味儿”实操手册:从“机器脸”到“高级脸”,只差这三步!
前端·vue.js·ai编程