6.1. Режим разработки

Режимы — это наборы правил или настроек для выполнения разных задач. К таким задачам относится оптимизация приложения после сборки, чтобы оно было быстрым и легковесным, без потери качества изображений, а также поддерживалось разными браузерами, вне зависимости от даты выхода в релиз.

В webpack есть три режима:

  • development mode,
  • production mode,
  • none mode.

Мы используем и видим в большинстве случаев лишь два из них: development mode и production mode. А none — это режим, когда ни один из двух предыдущих не обозначен явно.

По умолчанию webpack сам решает, что ему нужен режим разработки. Если нам это не подходит, необходимо явно указать следующее:

// в файле webpack.dev.js
module.exports = {
  mode: 'development'
}
// в файле webpack.prod.js
module.exports = {
  mode: 'production'
}
result
Предупреждение webpack о том, что при сборке не выставлен ни один из режимов

Если переводить дословно, то без указания режима при сборке проекта с использованием команды npm run build webpack самостоятельно выбрал для себя development-режим и показал предупреждением о том, что лучше указывать режим явно.

Чтобы избежать таких предупреждений, можно выставить none, но мы не рекомендуем так делать. В none-режиме предсказуемость поведения webpack теряется, а большинство команд из package.json работают некорректно.

Использование разных режимов

Для сборки проектов мы использовали несколько команд:

  • npm run build,
  • npm run dev.

В package.json они выглядят так:

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

Что происходит?

Вспомним, что npx — встроенная в Node.js утилита, которая позволяет запускать некоторые команды без run-скрипта — явного прописывания в package.json. То есть она позволяет запускать пакеты (вложенные в них функции, например npx eslint, проверяющий файлы на ошибки).

Так как мы пользуемся дополнительным пакетом webpack-merge, сборщику нужно явно указать, какой файл считать отправной точкой конфига. За это отвечает флаг --config webpack.config.js.

На флаге --mode остановимся чуть подробнее. В этой статье нас интересует development mode.

Development mode

Development mode — режим для разработки, упрощённо дев-режим. На нём работает сервер, а также может собираться проект. Однако этот режим не сжимает бандл и не минимизирует код.

Преимущества режима разработки

Работает быстрее production-режима. Это связано с тем, что режиму разработки не нужно создавать оптимизированный бандл, сжимать код, изображения и шрифты. Но и сам файл при этом может достигать колоссальных размеров, из-за чего при деплое на хостинг страница будет долго загружаться.

Показывает подробные сообщения об ошибках и иногда способы их решения. При этом указывает, в каком файле, строке и функции произошёл сбой. Особенно хорошо раскрывается при написании кода на TypeScript c использованием ESLint. При желании ошибки можно убрать, однако мы не советуем так делать.

При запущенном webpack-dev-server мы всегда работаем в development-режиме. Наш код не минимизирован и пересобирается каждый раз, когда мы вносим изменения. Всё происходит в оперативной памяти компьютера, и пытаться как это изменить крайне не рекомендуется во избежание критических ошибок. Саму ОС это не затронет, но и пытаться не стоит.

Что происходит после сборки

При вводе команды npm run dev (именно dev — от development) по истечении 2–3 секунд мы получаем следующее:

result
Наш бандл (файл index."здесь будет его хеш».js)

Код автоматически преобразован webpack-ом, но не оптимизирован. В нём находятся комментарии с предупреждением о том, что мы используем development-режим и для оптимизации стоит использовать production.

Ниже представлен скриншот вывода информации в консоль после сборки. Обратите внимание: сборщик не показывает предупреждений о том, что можно оптимизировать, или о том, что превышен допустимый размер шрифтов.

result
Сборка проекта. Вывод сведений в консоли

В следующей статье мы разберём особенности работы production-режима.