234

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

4

19 回答 19

262

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

在 Windows 中设置环境变量:

SET NODE_ENV=development

在 macOS / OS X 或Linux 上

export NODE_ENV=development
于 2012-06-19T15:19:53.230 回答
88

尖端

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
于 2016-08-15T02:58:10.307 回答
62

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

NODE_ENV=development node server.js

更容易,不是吗?:)

于 2014-06-15T18:08:17.193 回答
47

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

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

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

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

于 2015-07-24T13:10:29.123 回答
19

您可以使用环境 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
}
于 2018-12-29T22:35:49.803 回答
14

macOS中,对于使用 express 版本4.x.x并使用DOTENV插件的用户,需要像这样使用:

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

  2. 在根目录中创建一个文件 '.env' 并添加如下变量:

    NODE_ENV=development 或者 NODE_ENV = development

于 2018-12-08T18:21:09.797 回答
14

在 package.json 我们必须像下面这样配置(适用于 Linux 和 Mac OS)

重要的是在您的构建命令之后“导出 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",
  } 
  • 对于开发环境,我们必须点击“npm run dev”命令

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

于 2019-02-13T08:11:33.513 回答
7

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

require('dotenv').config()

于 2020-07-03T10:58:13.053 回答
6

在 UBUNTU 中使用:

$ 出口 NODE_ENV=测试

于 2014-02-14T17:56:30.313 回答
1

这是由于操作系统

在您的 package.json 中,确保有您的脚本(其中 app.js 是您要执行的主 js 文件,并且 NODE_ENV 在 .env 文件中声明)。例如:

"scripts": {
    "start": "node app.js",
    "dev": "nodemon server.js",
    "prod": "NODE_ENV=production & nodemon app.js"
  }

对于窗户

还要设置你的 .env 文件变量 NODE_ENV=development

如果您的 .env 文件位于 eg.config 文件夹的文件夹中,请确保在 app.js(您的主 js 文件)中指定

常量 dotenv = 要求('dotenv');dotenv.config({ path: './config/config.env' });

于 2020-05-06T11:03:54.310 回答
1

你可以使用dotenv来自 npm 的包,这里是链接:https ://www.npmjs.com/package/dotenv

它允许您将所有配置放在一个.env文件中

于 2021-05-28T15:35:27.077 回答
1

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

require('dotenv').config() //写在你将使用变量的文件中

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

于 2022-01-13T07:18:06.510 回答
0

如果你在 React 中遇到过这个问题,你需要 react-scripts@0.2.3 及更高版本。此外,对于在 React 中工作以外的其他环境变量NODE_ENV,它们需要以REACT_APP_.

于 2020-04-11T15:00:58.663 回答
0

对我来说,问题在于我正在使用pkg 库将我的应用程序转换为可执行的二进制文件。在这种情况下,公认的解决方案不起作用。但是,使用以下代码解决了我的问题:

const NODE_ENV = (<any>process).pkg ? 'production' : process.env.NODE_ENV;

我在 GitHub 上找到了这个解决方案。

于 2020-11-20T18:58:41.243 回答
0

在电子 Js 中

"scripts": {
    "start": "NODE_ENV=development electron index.js",
},
于 2021-03-15T05:17:47.337 回答
0

如果您使用名称process定义任何函数,那么这也可能导致此问题。

于 2021-05-05T06:23:46.067 回答
0

在 Windows/Mac/Linux 的 package.json 中定义 process.env.NODE_ENV:

以下是在我的 Mac(MacBook Pro 2019,16 英寸,Big Sur)上对我有用的方法:

"scripts": {
    "build": "export NODE_ENV=prod || set NODE_ENV=prod&& npx eslint . && node --experimental-json-modules ./backend/app.js && gulp",
},

使用该export NODE_ENV=prod || set NODE_ENV=prod&& 字符串可能适用于 Windows 和 Linux,但我尚未对此进行测试。

如果有人可以确认那将是很棒的。

不幸的是,在我的package.json文件中使用cross-env npm 包对我来说根本不起作用,我在Mac 上花了很长时间试图完成这项工作。

于 2021-10-28T00:17:34.707 回答
0

我也遇到过这个问题。我将 .env 文件移动到根文件夹(不是项目文件夹,更高级别)并且它成功了。

核实。它也可能对您有所帮助

于 2021-12-03T22:29:53.673 回答
-5

也可以通过代码设置,例如:

process.env.NODE_ENV = 'test';

于 2014-02-06T09:25:09.810 回答