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?

3

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 
9

tips

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 
6

For 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? :)

1

We 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).

3

You 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 } 
4

In macOS for those who are using the express version 4.x.x and using the DOTENV plugin, need to use like this:

  1. After installing the plugin import like the following in the file where you init the application: require('dotenv').config({path: path.resolve(__dirname+'/.env')});

  2. In the root directory create a file '.env' and add the varaiable like:

    NODE_ENV=development or NODE_ENV = development

0

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

2

As early as possible in your application, require and configure dotenv.

require('dotenv').config()

2

In UBUNTU use:

$ export NODE_ENV=test

0

It 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

1

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';

4

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy