Skip to content

Can’t set NODE_ENV=production with npm and webpack

I’m trying to access process.env.NODE_ENV inside my app, but I only get process is not defined when I check it.


"scripts": {
    "dev": "node ./node_modules/webpack/bin/webpack.js",
    "prod": "NODE_ENV=production node ./node_modules/webpack/bin/webpack.js -p"


const NODE_ENV = process.env.NODE_ENV ? process.env.NODE_ENV.toLowerCase() : 'development';

and below :

plugins: [
  new webpack.DefinePlugin({
    'process.env': {
      'NODE_ENV': JSON.stringify(NODE_ENV),
      'URL_DEV': JSON.stringify("specificIP"),
      'URL_PROD': JSON.stringify("OtherIP")

In the app source:

switch (process.env.NODE_ENV) {
  case 'development':
    url = process.env.URL_DEV;
  case 'production':
    url = process.env.URL_PROD;
    url = process.env.URL_DEV;

And it seems that process is not defined… What am I doing wrong here?


I’m not totally sure if the problem came from my scripts key inside package.json but it seems the NODE_ENV is now correctly set if I use this :

"scripts": {
  "dev": "cross-env NODE_ENV=development node ./node_modules/webpack/bin/webpack.js --progress --colors --bail",
  "prod": "cross-env NODE_ENV=production webpack -p --progress --colors --bail"

So I actually used cross-env and… it magically works. If you’re out of options like I was, you can still give this a shot.