[Solved] How to set NODE_ENV to production/development in OS X

For use in express.js environments. Any suggestions?

Solution #1:

Before running your app, you can do this in console,

export NODE_ENV=production

Or if you are in windows you could try this:

SET NODE_ENV=production

for PowerShell:

$env:NODE_ENV="production"

or you can run your app like this:

NODE_ENV=production node app.js

You can also set it in your js file:

process.env.NODE_ENV = 'production';

But I don’t suggest to do it in your runtime file, since it’s not easy to open up VIM in your server and change it to production. You can make a config.json file in your directory and everytime your app runs, it reads from it and sets the configuration.

Solution #2:

in package.json:

{
  ...
  "scripts": {
    "start": "NODE_ENV=production node ./app"
  }
  ...
}

then run in terminal:

npm start
Respondent: Teakcc

Solution #3:

No one mentioned .env in here yet? Make a .env file in your app root, then require('dotenv').config() and read the values. Easily changed, easily read, cross platform.

https://www.npmjs.com/package/dotenv

Respondent: theflowersoftime

Solution #4:

export NODE_ENV=production is bad solution, it disappears after restart.

if you want not to worry about that variable anymore – add it to this file:

/etc/environment

don’t use export syntax, just write (in new line if some content is already there):

NODE_ENV=production

it works after restart. You will not have to re-enter export NODE_ENV=production command anymore anywhere and just use node with anything you’d like – forever, pm2…

For heroku:

heroku config:set NODE_ENV="production"

which is actually default.

Respondent: Lukas Liesis

Solution #5:

To not have to worry whether you are running your scripts on Windows, Mac or Linux install the cross-env package. Then you can use your scripts easily, like so:

"scripts": {
    "start-dev": "cross-env NODE_ENV=development nodemon --exec babel-node -- src/index.js",
    "start-prod": "cross-env NODE_ENV=production nodemon --exec babel-node -- src/index.js"
}

Massive props to the developers of this package.

npm install --save-dev cross-env
Respondent: Notorious

Solution #6:

heroku config:set NODE_ENV="production"
Respondent: david_adler

Solution #7:

For Windows Powershell use this command

$env:NODE_ENV="production" ; node app.js
Respondent: Harikrishnan

Solution #8:

On OSX I’d recommend adding export NODE_ENV=development to your ~/.bash_profile and/or ~/.bashrc and/or ~/.profile.

Personally I add that entry to my ~/.bashrc and then have the ~/.bash_profile ~/.profile import the contents of that file, so it’s consistent across environments.

After making these additions, be sure to restart your terminal to pick up settings.

Respondent: Vincil Bishop

Solution #9:

If you are on windows. Open your cmd at right folder then first

set node_env={your env name here}

hit enter then you can start your node with

node app.js

it will start with your env setting

Respondent: garenyondem

Solution #10:

If you using webpack in your application, you can simply set it there, using DefinePlugin

So in your plugin section, set the NODE_ENV to production:

plugins: [
  new webpack.DefinePlugin({
    'process.env.NODE_ENV': '"production"',
  })
]
Respondent: Alireza

Solution #11:

Windows CMD -> set NODE_ENV=production

Windows Powershell -> $env:NODE_ENV="production"

MAC -> export NODE_ENV=production

Respondent: Janith Udara

Solution #12:

In order to have multiple environments you need all of the answers before (NODE_ENV parameter and export it), but I use a very simple approach without the need of installing anything. In your package.json just put a script for each env you need, like this:

...
"scripts": {
    "start-dev": "export NODE_ENV=dev && ts-node-dev --respawn --transpileOnly ./src/app.ts",
    "start-prod": "export NODE_ENV=prod && ts-node-dev --respawn --transpileOnly ./src/app.ts"
  }
 ...

Then, to start the app instead of using npm start use npm run script-prod.

In the code you can access the current environment with process.env.NODE_ENV.

Voila.

Respondent: rmpt

Solution #13:

Daniel has a fantastic answer which is the better approach for the correct deployment (set and forget) process.

For those using express.
You can use grunt-express-server which is fantastic as well.
https://www.npmjs.org/package/grunt-express-server

Respondent: Jesse

Solution #14:

It might be a chance that you have made two instances of sequelize object

for example :
var con1=new Sequelize();
var con2=new Sequelize();

than also same error will occur

Respondent: Prakhar Dixit

Solution #15:

npm start --mode production
npm start --mode development

With
process.env.NODE_ENV = ‘production’

Solution #16:

You can run by environment as below,

NODE_ENV=production npm run start

The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 .

Leave a Reply

Your email address will not be published.