Почему webpack 5 игнорирует NODE_ENV в одном файле, но читает в другом

#javascript #node.js #webpack

#javascript #node.js #webpack

Вопрос:

Столкнувшись со странной проблемой, когда Webpack 5 читает родительский файл и игнорирует

 const isDev = process.env.NODE_ENV !== 'production';
  

Но та же строка считывается в другом файле, и результат правильный.

Пакет JSON

 "build:prod": "cross-env NODE_ENV=production webpack --config internals/webpack/webpack.prod.babel.js --color -p --progress --hide-modules --display-optimization-bailout",
  

Конфигурация Webpack

 module.exports = (env, argv) => {
  return {
    entry: path.join(process.cwd(), 'index.js'),
    target: 'node',
    mode: 'production',

    module: {
      rules: [
        {
          test: /.jsx?$/, // Transform all .js and .jsx files required somewhere with Babel
          exclude: /node_modules/,
          use: {
            loader: 'babel-loader',
          },
        },
      ],
    },

    output: {
      filename: 'server.bundle.js',
      path: path.resolve(process.cwd(), 'build'),
    },

    optimization: {
      minimize: true,
      minimizer: [new TerserPlugin()],
      nodeEnv: 'production',
    },

    plugins: [
      new Dotenv({
        path: path.join(process.cwd(), 'config', '.env.production'), // load this now instead of the ones in '.env'
      }),

      new webpack.EnvironmentPlugin({
        NODE_ENV: JSON.stringify('production'),
      }),
    ],
  };
};
  

Указатель

 const express = require('express');
const path = require('path');
const server = express();

require('./middlewares/frontendMiddleware')(server);
  

Программное обеспечение frontendMiddleware

 module.exports = (app, options) => {
  const isDev = process.env.NODE_ENV !== 'production';

  if (isDev) { // <-- Thinks NODE_ENV isDev
    const addDevMiddlewares = require('./addDevMiddlewares');

    addDevMiddlewares(app, webpackConfig);
  } else {
    const addProdMiddlewares = require('./addProdMiddlewares');

    addProdMiddlewares(app, options);
  }

  return app;
};
  

addDevMiddlewares

 const isDev = process.env.NODE_ENV !== 'production';

  if (isDev) {
    ... // <-- Nicely ignores, or maybe not, but this peace of code is not present in the final build.

  } else{
    ... // <-- Goes here. All good!
  }