Node.js中process.env问题

起因:

最近新起一个项目时候,使用NODE_ENV区分环境,在package.json中使用scripts命令。

json 复制代码
"dev": "NODE_ENV=dev && nest start --watch"

在Mac中没问题,在Windows系统中报错。

arduino 复制代码
'NODE_ENV' 不是内部或外部命令,也不是可运行的程序

解决

Windows系统不支持NODE_ENV=dev,需要用set或者cross-env

  1. 使用set解决Windows系统下问题。
lua 复制代码
npm install --save-dev cross-env
"dev": "set NODE_ENV=dev && nest start --watch",
  1. 使用cross-env跨平台设置和使用环境变量。
lua 复制代码
npm install --save-dev cross-env
"dev": "cross-env NODE_ENV=dev && nest start --watch",

注意:

1、 使用set方法,又发现代码逻辑报错。然后打印查看process.env.NODE.ENV值为"dev "

Javascript 复制代码
"dev": "set NODE_ENV=dev && nest start --watch",
console.log(process.env.NODE_ENV, process.env.NODE_ENV === 'dev','debug')
打印值 dev false debug

原来process.env.NODE_ENV值为"dev ",在&&符号前都为赋值内容,原来多了一个空格

Javascript 复制代码
"dev": "set NODE_ENV=dev&& nest start --watch",
console.log(process.env.NODE_ENV, process.env.NODE_ENV === 'dev','debug')
打印值 dev true debug

2、使用cross-env时不需要&&

Javascript 复制代码
"dev": "sross-env NODE_ENV=dev nest start --watch",
console.log(process.env.NODE_ENV, process.env.NODE_ENV === 'dev','debug')
打印值 dev false debug

cross-env原理

cross-env 是一个运行在 Node.js 环境中的工具包,它的主要作用是让我们可以在命令行中设置环境变量,而不必担心跨操作系统的兼容问题。在 Unix 和 Windows 系统中设置环境变量的方式是不同的,这就导致了我们无法写出一条在所有操作系统中都可以运行的设置环境变量的命令。cross-env 的出现就是为了解决这个问题。

以一个非常常见的场景为例,让我们来看一下在没有使用 cross-env 的情况下,如何在不同的操作系统中设置环境变量。在 Unix 系统中,我们通常会这样做:

NODE_ENV=production node app.js

而在 Windows 系统中,我们需要这样做:

set NODE_ENV=production&&node app.js

这样的差异使得我们在编写跨平台脚本时遇到了困难,因为我们无法保证所有的开发者和用户都在使用同一种操作系统。

这时,cross-env 就派上了用场。使用 cross-env,我们可以这样设置环境变量:

cross-env NODE_ENV=production node app.js

这条命令无论在 Unix 还是在 Windows 系统中,都能正确地设置 NODE_ENV 环境变量为 production。

cross-env 的工作原理是它在内部对操作系统进行了检查,并根据操作系统的类型来决定如何设置环境变量。这样,开发者就无需担心操作系统的差异,只需要专注于他们的应用程序代码。

cross-env 是一个非常小巧的工具包,但它解决了一个非常实际的问题。在实际开发中,开发者经常需要根据环境变量来改变他们的应用程序的行为。比如,在开发环境中,开发者可能希望打开一些调试日志,而在生产环境中,他们可能希望关闭这些日志。通过设置环境变量,开发者可以在不改变代码的情况下,实现这种行为的切换。

不仅如此,环境变量还常常被用来存储敏感信息,如数据库密码、API 密钥等。这些信息不应该被硬编码在代码中,而是应该存储在环境变量中,以增加应用程序的安全性。

在使用 cross-env 时,我们通常会在 package.json 文件的 scripts 字段中使用它,像下面这样:

"scripts": {"start": "cross-env NODE_ENV=production node app.js"}

然后,我们就可以通过运行 npm start 来启动我们的应用程序,而 NODE_ENV 环境变量会被设置为 production。

🎉 如果帮助到你了,请点赞支持下。😁

相关推荐
Rain50913 小时前
2.1 Nest.js 项目初始化与模块化架构
开发语言·前端·javascript·后端·架构·数据分析·node.js
TT_Close13 小时前
别再复制旧 Flutter 工程了,真正拖慢你的不是业务代码
flutter·npm·visual studio code
Penfy_Z16 小时前
【Python LLM 调用踩坑】Connection error 终极解决方案!npm 代理导致阿里云通义千问接口连接失败
开发语言·python·npm
矩阵科学20 小时前
Langchain.js 实战五:Agent 实战
langchain·node.js
终将老去的穷苦程序员1 天前
npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚
前端·npm·node.js
之歆1 天前
Day10_Node.js 与 Express 开发实战指南:从零到一构建专业级 Web 服务
前端·node.js·express
之歆2 天前
Node.js 与 NPM 包管理完全指南
前端·npm·node.js
12点一刻2 天前
npx 使用入门教程:是什么、怎么用、和 npm 有什么区别
前端·npm·node.js
Sca_杰2 天前
速通抖音开放平台API-生活服务商应用
javascript·node.js
console.log('npc')2 天前
核心实战篇 生成式 UI+A2UI 协议 + 全栈 Agent 项目落地
node.js·react·#生成式ui·a2ui协议·ui agent·ai前端实战