Шаг 2. Создание файлов и директорий, перенос кода

Создадим директорию, в которой будут лежать конфиги — отдельно для каждого режима разработки.

Создание новой директории из терминала выглядит так:

mkdir build

Там же создаём три файла:

  • webpack.base.js — для обобщения конфига с целью избежания дубликатов;

  • webpack.dev.js — для всего, что связано с режимом разработки;

  • webpack.prod.js — для всего, что связано с режимом сборки.

Теперь весь код, находящийся в файле webpack.config.js, переносим в созданный webpack.base.js. Не забываем, что теперь в файле package.json необходимо изменить скрипты, указать в них пути к головному конфигу:

"scripts": {
  "build": "npx webpack --mode production --config webpack.config.js",
  "dev": "npx webpack --mode development --config webpack.config.js",
  "start": "npx webpack serve --mode development"
}

Связано это с тем, что «из коробки» в webpack нельзя разъединить конфиг на несколько файлов. По умолчанию сборщик самостоятельно ищет файл с именем webpack.config.js, и установленный пакет webpack-merge ломает данную встроенную функцию.

В самом webpack.config.js у нас теперь лежит следующий код:

const {merge} = require('webpack-merge');
const baseConfig = require('./build/webpack.base');
const devConfig = require('./build/webpack.dev');
const prodConfig = require('./build/webpack.prod');

module.exports = (_, mode) => {
  switch (mode.mode) {
    case 'development':
      return merge(baseConfig, devConfig);
    case 'production':
      return merge(baseConfig, prodConfig);
    default:
      throw new Error('No matching configuration was found!');
  }
};