I'm trying to follow a tutorial on NodeJS. I don't think I missed anything but whenever I call the process.env.NODE_ENV the only value I get back is undefined. According to my research the default value should be development. How is this value dynamically set and where is it set initially?
20 Answers
process.env is a reference to your environment, so you have to set the variable there.
To set an environment variable in Windows:
SET NODE_ENV=development on macOS / OS X or Linux:
export NODE_ENV=development 9tips
in package.json:
"scripts": { "start": "set NODE_ENV=dev && node app.js" } in 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) so, this may better:
"start": "set NODE_ENV=dev&& node app.js" or
console.log(process.env.NODE_ENV.trim() === 'dev') // true 6For people using *nix (Linux, OS X, etc.), there's no reason to do it via a second export command, you can chain it as part of the invoking command:
NODE_ENV=development node server.js Easier, no? :)
1We ran into this problem when working with node on Windows.
Rather than requiring anyone who attempts to run the app to set these variables, we provided a fallback within the application.
var environment = process.env.NODE_ENV || 'development'; In a production environment, we would define it per the usual methods (SET/export).
3You can use the cross-env npm package. It will take care of trimming the environment variable, and will also make sure it works across different platforms.
In the project root, run:
npm install cross-env Then in your package.json, under scripts, add:
"start": "cross-env NODE_ENV=dev node your-app-name.js" Then in your terminal, at the project root, start your app by running:
npm start The environment variable will then be available in your app as process.env.NODE_ENV, so you could do something like:
if (process.env.NODE_ENV === 'dev') { // Your dev-only logic goes here } 4In macOS for those who are using the express version 4.x.x and using the DOTENV plugin, need to use like this:
After installing the plugin import like the following in the file where you init the application:
require('dotenv').config({path: path.resolve(__dirname+'/.env')});In the root directory create a file '.env' and add the varaiable like:
NODE_ENV=developmentorNODE_ENV = development
in package.json we have to config like below (works in Linux and Mac OS)
the important thing is "export NODE_ENV=production" after your build commands below is an example:
"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", } for dev environment, we have to hit "npm run dev" command
for a production environment, we have to hit "npm run start" command
As early as possible in your application, require and configure dotenv.
require('dotenv').config()
In UBUNTU use:
$ export NODE_ENV=test
0It is due to OS
In your package.json, make sure to have your scripts(Where app.js is your main js file to be executed & NODE_ENV is declared in a .env file).Eg:
"scripts": { "start": "node app.js", "dev": "nodemon server.js", "prod": "NODE_ENV=production & nodemon app.js" } For windows
Also set up your .env file variable having NODE_ENV=development
If your .env file is in a folder for eg.config folder make sure to specify in app.js(your main js file)
const dotenv = require('dotenv'); dotenv.config({ path: './config/config.env' });
You can use the dotenv package from npm, here is the link:
Which allows you to place all your configuration in a .env file
install dotenv module ( npm i dotenv --save )
require('dotenv').config() //write inside the file where you will use the variable
console.log(process.env.NODE_ENV) // returns value stored in .env file
If you faced this probem in React, you need react-scripts@0.2.3 and higher. Also for other environment variables than NODE_ENV to work in React, they need to be prefixed with REACT_APP_.
For me, the issue was that I was using the pkg library to turn my app into an executable binary. In that case, the accepted solutions didn't work. However, using the following code solved my problem:
const NODE_ENV = (<any>process).pkg ? 'production' : process.env.NODE_ENV; I found this solution here on GitHub.
In Electron Js
"scripts": { "start": "NODE_ENV=development electron index.js", }, If you define any function with the name process then that may also cause this issue.
Defining process.env.NODE_ENV in package.json for Windows/Mac/Linux:
Here's what worked for me on my Mac (MacBook Pro 2019, 16 inch, Big Sur):
"scripts": { "build": "export NODE_ENV=prod || set NODE_ENV=prod&& npx eslint . && node --experimental-json-modules ./backend/app.js && gulp", }, Using the export NODE_ENV=prod || set NODE_ENV=prod&& string may work in Windows and Linux but I haven't tested that.
If someone could confirm that would be great.
Unfortunately using the cross-env npm package did NOT work for me at all in my package.json file and I spend a long time on my Mac trying to make this work.
I also faced this issue. I moved .env file to the root folder (not the project folder, a level higher) and it worked out.
Check it. it might help you as well
Must be the first require in app.js
npm install dotenv require("dotenv").config(); You can also set it by code, for example:
process.env.NODE_ENV = 'test';