Разделение задач в webpack

На представленном ниже конфиге можно сбилдить js под ES5 либо под ES2015 +, но не могу сконфигурировать так, чтобы билдилось 2 файла, а не 1. Буду рад помощи! Для тех кто хочется потыкать есть репо - https://github.com/krovorgen/template-webpack-typescript

const path = require('path');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');

const isDev = process.env.NODE_ENV === 'development';
const isProd = process.env.NODE_ENV === 'production';

const filename = (ext) => (isDev ? `[name].${ext}` : `[name].[contenthash].${ext}`);

const optimization = () => {
  const configObj = {
    splitChunks: {
      chunks: 'all',
    },
  };

  if (isProd) {
    configObj.minimizer = [`...`, new CssMinimizerPlugin()];
  }

  return configObj;
};

module.exports = {
  context: path.resolve(__dirname, 'src'),
  mode: 'development',
  devServer: {
    historyApiFallback: true,
    contentBase: path.resolve(__dirname, 'app'),
    open: true,
    compress: true,
    hot: true,
    port: 3000,
  },
  entry: './js/main.js',
  output: {
    filename: `./js/${filename('js')}`,
    path: path.resolve(__dirname, 'app'),
    publicPath: '',
  },
  devtool: isProd ? false : 'source-map',
  plugins: [new CleanWebpackPlugin()],
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: [['@babel/preset-env', { targets: '> 0.25%, not dead' }]],
          },
        },
      },
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: [
              [
                '@babel/preset-env',
                {
                  targets: {
                    browsers: [
                      'Chrome >= 60',
                      'Safari >= 10.1',
                      'iOS >= 10.3',
                      'Firefox >= 54',
                      'Edge >= 15',
                    ],
                  },
                },
              ],
            ],
          },
        },
      },
    ],
  },
  optimization: optimization(),
};


Ответы (1 шт):

Автор решения: Krovorgen

Получилось решить проблему по совету выше. Команда для запуска получилась:

"es5:prod": "cross-env NODE_ENV=production webpack --config-name es5 --config-name es6 --mode production",

const path = require('path');
const TerserPlugin = require('terser-webpack-plugin');

const isDev = process.env.NODE_ENV === 'development';
const isProd = process.env.NODE_ENV === 'production';

const fileName = 'core';

const optimizations = () => ({
  minimize: true,
  minimizer: [new TerserPlugin()],
});

module.exports = [
  {
    name: 'es5',
    context: path.resolve(__dirname, 'src'),
    mode: 'development',
    entry: `./js/${fileName}.js`,
    output: {
      filename: `${fileName}.es5.min.js`,
      path: path.resolve(__dirname, 'app'),
    },
    module: {
      rules: [
        {
          test: /\.js$/,
          exclude: /node_modules/,
          use: {
            loader: 'babel-loader',
            options: {
              presets: [['@babel/preset-env', { targets: '> 0.25%, not dead' }]],
            },
          },
        },
      ],
    },
    optimization: optimizations(),
  },
  {
    name: 'es6',
    context: path.resolve(__dirname, 'src'),
    mode: 'development',
    entry: `./js/${fileName}.js`,
    output: {
      filename: `${fileName}.es6.min.js`,
      path: path.resolve(__dirname, 'app'),
    },
    module: {
      rules: [
        {
          test: /\.js$/,
          exclude: /node_modules/,
          use: {
            loader: 'babel-loader',
            options: {
              presets: [
                [
                  '@babel/preset-env',
                  {
                    targets: {
                      browsers: [
                        'Chrome >= 60',
                        'Safari >= 10.1',
                        'iOS >= 10.3',
                        'Firefox >= 54',
                        'Edge >= 15',
                      ],
                    },
                  },
                ],
              ],
            },
          },
        },
      ],
    },
    optimization: optimizations(),
  },
];

→ Ссылка