为什么process.env.NODE_ENV没有被定义?
我正在努力学习NodeJS的教程。我不认为我错过了什么,但每当我调用process.env.NODE_ENV
的时候,我得到的唯一值是undefined
。根据我的研究,默认值应该是development
。这个值是如何动态设置的,它最初是在哪里设置的?
heroku config:set NODE_ENV="production"
- Connor Leech 2014-06-17
process.env
是对你的环境的引用,所以你必须在那里设置这个变量。
要设置Windows中的环境变量,。
SET NODE_ENV=development
在macOS / OS X或Linux上使用。
export NODE_ENV=development
export NODE_ENV=development
,然后在同一终端上做了react-native run-ios
。调试时,process.env.NODE_ENV
的值是未定义的。
- Ash 2019-06-26
小贴士
在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
"start": "set NODE_ENV=dev&& node app.js"
- Bernardo Dal Corno 2018-12-19
console.log(process.env.NODE_ENV.length)
//4(包括末尾的空格)。
- gregn3 2020-06-08
SET
使启动脚本仅限于Windows系统。
- Quanta 2020-09-29
"start": "export NODE_ENV='dev' && ..."
.所以要把环境放在两个'
之间。
- erkage 2021-07-11
对于使用*nix(Linux、OS X等)的人来说,没有理由通过第二条导出命令来做,你可以把它作为调用命令的一部分连锁起来。
NODE_ENV=development node server.js
更容易,不是吗?:)
我们在Windows上用节点工作时遇到了这个问题。
我们没有要求任何试图运行应用程序的人设置这些变量,而是在应用程序中提供了一个后备方案。
var environment = process.env.NODE_ENV || 'development';
在生产环境中,我们会按照通常的方法(SET/导出)来定义它。
你可以使用cross-env npm包。它将负责修剪环境变量,并确保它在不同的平台上工作。
在项目根目录下,运行。
npm install cross-env
然后在你的package.json中,在scripts项下,添加。
"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
}
在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",
}
对于开发环境,我们必须执行 "npm run dev "命令。
在生产环境中,我们必须执行 "npm run start "命令。
set
而不是export
。"scripts": { "start": "set NODE_ENV=production && npm run build && npm run start-server" }
- cweave 2022-01-02
在macOS中,对于那些使用Express版本4.x.x
和使用DOTENV
插件的人来说,需要像这样使用。
安装该插件后,在你启动应用程序的文件中导入如下内容:
require('dotenv').config({path: path.resolve(__dirname+'/.env')});
。在根目录下创建一个文件'.env',并添加类似的变体。
NODE_ENV=development
或NODE_ENV = development
在你的应用程序中,尽可能早地要求和配置dotenv。
require('dotenv').config()
main.ts
。
- xaphod 2021-04-07
在UBUNTU的使用中。
$ 出口 NODE_ENV=测试
"dev": "set NODE_ENV=development&& npx nodemon bin/www",
在Ubuntu上。"dev": "export NODE_ENV=development&& npx nodemon bin/www",
- dixoen 2022-06-21
安装dotenv模块 ( npm i dotenv --save )
require('dotenv').config() //写在你要使用变量的文件里面。
console.log(process.env.NODE_ENV) //返回存储在.env文件中的值。
这是由于操作系统的原因。
在你的package.json中,确保有你的scripts(其中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文件在一个文件夹中,例如.config文件夹,请确保在app.js(你的主js文件)中指定。
常量 dotenv = 要求('dotenv'); dotenv.config({ path: './config/config.env' });
你可以使用npm的dotenv
包,这里是链接。https://www.npmjs.com/package/dotenv
这允许你将所有的配置放在一个.env
文件中
必须是app.js中的第一个requirement。
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)
如果你在React中遇到这个问题,你需要react-scripts@0.2.3,甚至更高。此外,除了NODE_ENV
之外,其他环境变量在React中也需要以REACT_APP_
为前缀。
对我来说,问题在于我使用pkg库来将我的应用程序变成可执行的二进制文件。在这种情况下,公认的解决方案并不奏效。然而,使用下面的代码解决了我的问题。
const NODE_ENV = (<any>process).pkg ? 'production' : process.env.NODE_ENV;
我在GitHub上找到了这个解决方案在这里。
在Electron Js中
"scripts": {
"start": "NODE_ENV=development electron index.js",
},
如果你定义了任何名称为process的函数,那么这也可能导致这个问题。
在package.json中为Windows/Mac/Linux定义process.env.NODE_ENV。
以下是在我的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对我来说完全没有@NOT的作用,我在Mac上花了很长时间试图使这个工作正常。
我也遇到了这个问题,我把.env文件移到了根文件夹(不是项目文件夹,高了一级),结果就成功了。
检查一下。它可能对你也有帮助。
你也可以通过代码来设置,比如说。
process.env.NODE_ENV = 'test';