为什么 process.env.NODE_ENV 未定义?

IT技术 javascript node.js
2021-02-28 22:46:34

我正在尝试学习有关 NodeJS 的教程。我不认为我错过了任何东西,但是每当我打电话时,process.env.NODE_ENV我得到的唯一value是undefined. 根据我的研究,默认值应该是development. 这个值是如何动态设置的,它最初是在哪里设置的?

6个回答

process.env 是对您的环境的引用,因此您必须在那里设置变量。

在 Windows 中设置环境变量

SET NODE_ENV=development

在 macOS / OS X 或Linux 上

export NODE_ENV=development
没有为我工作。export NODE_ENV=developmentreact-native run-ios从同一终端执行之前,我在 Mac 终端上执行调试时, 的值process.env.NODE_ENV未定义。
2021-04-16 22:46:34
对于 Linux,vi ~/.bash_profile,然后插入 NODE_ENV=development 并保存。
2021-04-22 22:46:34
请注意,module“cross-env”的作用与上述类似,它适用于 OSX 和 Windows:“cross-env NODE_ENV=development”。您需要先安装 cross-env:“npm install cross-env --save”。在 package.json 的脚本中使用它,你就可以在两个平台上运行了。
2021-04-24 22:46:34
万一其他人挣扎......“SET V = VAL”和“SET V = VAL”之间存在差异。空间很重要。
2021-05-01 22:46:34
您可能会补充说,如果未设置 NODE_ENV,则应用程序的行为类似于“开发”模式
2021-05-10 22:46:34

尖端

package.json

"scripts": {
  "start": "set NODE_ENV=dev && node app.js"
 }

app.js

console.log(process.env.NODE_ENV) // dev
console.log(process.env.NODE_ENV === 'dev') // false
console.log(process.env.NODE_ENV.length) // 4 (including a space at the end) 

所以,这可能会更好:

"start": "set NODE_ENV=dev&& node app.js"

或者

console.log(process.env.NODE_ENV.trim() === 'dev') // true
出色的观察,console.log(process.env.NODE_ENV.length) // 4(包括末尾的空格)
2021-04-26 22:46:34
使用SET使启动脚本仅限于 Windows。
2021-04-28 22:46:34
这更安全:console.log(('' + process.env.NODE_ENV).trim() === 'dev') // true,因为即使process.env.NODE_ENV未定义,它也不会抛出错误
2021-05-02 22:46:34
你可以做的是这样,所以你不必修剪: "start": "set NODE_ENV=dev&& node app.js"
2021-05-04 22:46:34
你可以做到这一点,解决了空间问题:"start": "export NODE_ENV='dev' && ..."所以把 env 放在两个'.
2021-05-13 22:46:34

对于使用 *nix(Linux、OS X 等)的人,没有理由通过第二个导出命令来执行此操作,您可以将其链接为调用命令的一部分:

NODE_ENV=development node server.js

更容易,不是吗?:)

像 cross-env 这样的包也允许它在 Windows 上工作。
2021-04-22 22:46:34

我们在 Windows 上使用 node 时遇到了这个问题。

我们没有要求任何试图运行应用程序的人设置这些变量,而是在应用程序中提供了一个后备方案。

var environment = process.env.NODE_ENV || 'development';

在生产环境中,我们会按照通常的方法(SET/export)定义它。

这是最务实的解决方案。
2021-04-26 22:46:34
如果process.env.NODE_ENV的值未定义并且用户想在 .env 文件中将开发更改为生产怎么办?
2021-05-02 22:46:34
这在使用 typescript strictNullChecks 时效果很好
2021-05-11 22:46:34

您可以使用跨环境npm 包。它将负责修剪环境变量,并确保它可以跨不同平台工作。

在项目根目录中,运行:

npm install cross-env

然后在你的 package.json 中,在脚本下,添加:

"start": "cross-env NODE_ENV=dev node your-app-name.js"

然后在您的终端中,在项目根目录下,通过运行以下命令启动您的应用程序:

npm start

然后环境变量将在您的应用程序中作为 可用process.env.NODE_ENV,因此您可以执行以下操作:

if (process.env.NODE_ENV === 'dev') {
  // Your dev-only logic goes here
}
对我来说,它在本地机器窗口上也不起作用。NODE_ENV 仍未定义
2021-04-18 22:46:34
npm install --save-dev cross-env
2021-04-28 22:46:34
对我来说,以某种方式接受的答案不起作用,但这 <3
2021-05-03 22:46:34
我不认为这行得通。在我当前的项目中尝试过,NODE_ENV 仍然未定义。这似乎需要更多配置才能工作。
2021-05-15 22:46:34