How to set NODE_ENV to production/development in OS X
Mia Lopez
For use in express.js environments. Any suggestions?
116 Answers
Before running your app, you can do this in console,
export NODE_ENV=productionOr if you are in windows you could try this:
SET NODE_ENV=productionfor PowerShell:
$env:NODE_ENV="production"or you can run your app like this:
NODE_ENV=production node app.jsYou 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.
12in package.json:
{ ... "scripts": { "start": "NODE_ENV=production node ./app" } ...
}then run in terminal:
npm start 10 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.
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/environmentdon't use export syntax, just write (in new line if some content is already there):
NODE_ENV=productionit 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.
3To 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 2 heroku config:set NODE_ENV="production" 3 For Windows Powershell use this command
$env:NODE_ENV="production" ; node app.js 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.
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.
2Windows CMD -> set NODE_ENV=production
Windows Powershell -> $env:NODE_ENV="production"
MAC -> export NODE_ENV=production
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.jsit will start with your env setting
3If 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"', })
] npm start --mode production
npm start --mode developmentWith process.env.NODE_ENV = 'production'
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.
You can run by environment as below,
NODE_ENV=production npm run start I don't see a Docker solution explicitly mentioned anywhere; hopefully this helps someone:
In Dockerfile:
FROM node:16.11-alpine3.14 AS production
ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}
...