为什么process.env。NODE_ENV定义?

我正在学习NodeJS的教程。我不认为我错过了任何东西,但每当我调用process.env.NODE_ENV时,我得到的唯一值是undefined。根据我的研究,默认值应该是development。该值如何动态设置,初始设置在哪里?

484126 次浏览

process.env是对你的环境的引用,所以你必须在那里设置变量。

要设置Windows环境变量:

SET NODE_ENV=development

在macOS / OS X或Linux上:

export NODE_ENV=development

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

process.env.NODE_ENV = 'test';

在UBUNTU中使用:

$ export NODE_ENV=test

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

NODE_ENV=development node server.js

更容易,不是吗?:)

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

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

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

在生产环境中,我们将根据通常的方法(SET/export)定义它。

提示

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

macOS中,对于那些正在使用快速版本4.x.x并使用DOTENV插件的人,需要像这样使用:

    在安装插件导入后,在初始化应用程序的文件中如下所示: 李require('dotenv').config({path: path.resolve(__dirname+'/.env')}); < / p > < / >
  1. 在根目录下创建一个文件'。Env '并添加如下变量:

    < p > NODE_ENV=development 或 李NODE_ENV = development < / p > < / >

你可以使用cross-env npm包。它将负责调整环境变量,并确保它可以跨不同平台工作。

在项目根目录下运行:

npm install cross-env

然后在你的包裹里。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
}

在包中。我们必须像下面这样配置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",
}
  • 对于开发环境,我们必须点击“npm run dev”命令

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

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

这是由于操作系统

在你的包裹里。json,确保有你的脚本(app.js是你的主js文件要执行&NODE_ENV在.env文件中声明)。例如:

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

对于windows

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

如果你的。env文件在一个文件夹,例如。Config文件夹确保在app.js(你的主js文件)中指定

const dotenv = require('dotenv'); dotenv。Config ({path: './ Config / Config . path: ')env '}); < / p >

在应用程序中尽可能早地要求并配置dotenv。

require('dotenv').config()

对我来说,问题是我正在使用包裹库将我的应用程序转换为可执行二进制文件。在这种情况下,公认的解决方案是行不通的。然而,使用下面的代码解决了我的问题:

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

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

在电子Js中

"scripts": {
"start": "NODE_ENV=development electron index.js",
},

如果你定义了任何名为过程的函数,也可能会导致这个问题。

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

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

定义process.env。NODE_ENV在包中。Windows/Mac/Linux:

以下是我在我的Mac (MacBook Pro 2019, 16英寸,大苏尔)上工作的方法:

"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 package没有为我工作,我花了很长时间在我的Mac上试图使这个工作。

我也遇到过这个问题。 我把。env文件移动到根文件夹(不是项目文件夹,更高级别),它解决了

检查它。这也可能对你有帮助

安装dotenv模块(NPM:我知道了,省省吧)

< >强要求(dotenv) . config() < / >强 //写入你将使用变量的文件中

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

必须是app.js中的第一个要求

npm install dotenv


require("dotenv").config();

在我的例子中,我有一个节点应用程序。我的结构方式是我有客户端文件夹和服务器文件夹。我的。env文件和这两个文件夹放在一起。我的服务器文件需要。env文件。它返回未定义,因为它不在服务器文件中。这是一个疏忽。

App
-client
-server
-.env


Instead I moved .env inside server file like so:


App
-client
-server
|-.env <---here
|-package.json
|-and the rest of the server files...


(before this - ofcourse have the dotenv npm package installed and follow its doc)