if(process.env.NODE_ENV === 'production') always false
I had this problem today.
When I used set NODE_ENV=production && something
in npm scripts
then NODE_ENV=production
becomes production + " "
with one whitespace after it.
So, we are comparing production
with production + " "
, this obviously returns false.
package.json
scripts: {
"start": "set NODE_ENV=development && webpack --watch --progress",
"test": "set NODE_ENV=production && webpack"
}
Comparisons
console.log(process.env.NODE_ENV.trim() === "production"); //True if ran test else false
console.log(process.env.NODE_ENV === "production"); //False
console.log(process.env.NODE_ENV.trim() === "development"); //True if ran start else false
console.log(process.env.NODE_ENV === "development"); //False
Working sample of webpack.config.js
const webpack = require("webpack");
const dev = process.env.NODE_ENV.trim() !== "production";
module.exports = {
entry: "./index.js",
output: {
path: "./",
filename: "parse.js"
},
module: {
rules: [
{
test: /\.js/,
use: "babel-loader",
exclude: /node_modules/
}
]
},
plugins: dev ? [] : [
new webpack.optimize.UglifyJsPlugin()
],
target: "node"
};
So, use trim()
.
Use:
if ((process.env.NODE_ENV || '').trim() !== 'production') {
Be careful with the above solutions since NODE_ENV can be undefined and will throw running .trim() on undefined.
The problem is that you're storing the single quotes in NODE_ENV
, so the value of NODE_ENV
is actually "'production'"
instead of just "production"
. This is evident in your debug output.
Change set NODE_ENV='production'
to set NODE_ENV=production
and it should work as you expect.