process.env.NODE_ENV未定义

bas*_*eps 151 javascript node.js

我正在尝试关注NodeJs的教程.我不认为我错过任何东西,但每当我打电话给process.env.NODE_ENV我回来的唯一价值是不确定的.根据我的研究,默认值应该是"开发".如何动态设置此值以及最初设置的位置?

Jam*_*sky 180

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

在Windows中设置环境变量:

SET NODE_ENV=development
Run Code Online (Sandbox Code Playgroud)

在OS X或Linux上:

export NODE_ENV=development
Run Code Online (Sandbox Code Playgroud)

  • 您可以补充一点,如果未设置NODE_ENV,则应用程序的行为类似于"开发"模式 (4认同)
  • 请注意,模块"cross-env"与上面类似,它将在OSX和Windows上运行:"cross-env NODE_ENV = development".你需要先安装cross-env:"npm install cross-env --save".在package.json的脚本中有这个,你可以在两个平台上运行. (4认同)
  • 如果其他人挣扎......"SET V = VAL"和"SET V = VAL"之间存在差异.空间很重要. (3认同)
  • 没为我工作。我在Mac终端上执行`export NODE_ENV = development`,然后在同一终端上执行“ react-native run-ios”。调试时,“ process.env.NODE_ENV”的值未定义。 (3认同)

mla*_*tti 48

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

NODE_ENV=development node server.js
Run Code Online (Sandbox Code Playgroud)

更容易,不是吗?:)

  • 像cross-env这样的包也可以在windows上运行. (3认同)

ken*_*ley 48

提示

package.json:

"scripts": {
  "start": "set NODE_ENV=dev && node app.js"
 }
Run Code Online (Sandbox Code Playgroud)

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) 
Run Code Online (Sandbox Code Playgroud)

所以,这可能更好:

"start": "set NODE_ENV=dev&& node app.js"
Run Code Online (Sandbox Code Playgroud)

要么

console.log(process.env.NODE_ENV.trim() === 'dev') // true
Run Code Online (Sandbox Code Playgroud)

  • 使用“SET”使启动脚本仅限于Windows。 (4认同)
  • 你可以做的是这样,所以你不必修剪:`"start": "set NODE_ENV=dev&& node app.js"` (3认同)
  • 您可以这样做来解决空间问题:`"start": "export NODE_ENV='dev' && ..."`。所以把 env 放在两个`'`之间。 (3认同)
  • 观察得很好,`console.log(process.env.NODE_ENV.length)` **// 4(包括末尾的空格)** (2认同)
  • **永远不要** 在 package.json 中硬编码 Windows 特定的内容 (2认同)

小智 30

我们在Windows上使用节点时遇到了这个问题.

我们提供了应用程序中的后备,而不是要求任何试图运行应用程序的人设置这些变量.

var environment = process.env.NODE_ENV || 'development';
Run Code Online (Sandbox Code Playgroud)

在生产环境中,我们将按照常规方法(SET/export)定义它.

  • 这是最务实的解决方案。 (4认同)

小智 12

在您的应用程序中尽早要求并配置 dotenv。

require('dotenv').config()


小智 10

必须是 app.js 中的第一个 require

npm install dotenv

require("dotenv").config();
Run Code Online (Sandbox Code Playgroud)


小智 6

在UBUNTU中使用:

$ export NODE_ENV = test


NRP*_*NRP 6

macOS中,对于那些使用Express版本4.x.xDOTENV插件的用户,需要这样使用:

  1. 安装插件导入后,在您启动应用程序的文件中,如下所示: require('dotenv').config({path: path.resolve(__dirname+'/.env')});

  2. 在根目录中,创建一个文件“ .env”并添加以下变量:

    NODE_ENV=development 要么 NODE_ENV = development


D V*_*esh 6

在package.json中,我们必须进行如下配置(适用于Linux和Mac OS)

重要的是下面的构建命令是一个示例之后,“ export NODE_ENV = production”:

  "scripts": {
     "start": "export NODE_ENV=production && npm run build && npm run start-server",
     "dev": "export NODE_ENV=dev && npm run build && npm run start-server",
  } 
Run Code Online (Sandbox Code Playgroud)
  • 对于开发环境,我们必须点击“ npm run dev”命令

  • 对于生产环境,我们必须点击“ npm run start”命令


小智 6

安装 dotenv 模块 ( npm i dotenv --save )

require('dotenv').config() //写入将使用变量的文件内

console.log(process.env.NODE_ENV) // 返回.env 文件中存储的值


Lir*_*n H 5

您可以使用cross-env npm软件包。它将负责修剪环境变量,并且还将确保它可在不同平台上工作。

在项目根目录中,运行:

npm install cross-env
Run Code Online (Sandbox Code Playgroud)

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

"start": "cross-env NODE_ENV=dev node your-app-name.js"
Run Code Online (Sandbox Code Playgroud)

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

npm start
Run Code Online (Sandbox Code Playgroud)

然后,该环境变量将在您的应用中以形式提供process.env.NODE_ENV,因此您可以执行以下操作:

if (process.env.NODE_ENV === 'dev') {
  // Your dev-only logic goes here
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为这行不通。在我当前的项目中尝试过,NODE_ENV 仍然未定义。看起来这可能需要更多配置才能工作。 (2认同)
  • **npm install --save-dev 跨环境** (2认同)