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