Последние несколько недель я занимался Webpack. Для большинства тех, кого я знаю, кто его использует, внутренняя работа остается непрозрачной. Волшебный черный ящик. Итак, мы с парой друзей надеялись немного приоткрыть завесу, создав ряд замечательных инструментов визуализации веб-пакетов, доступных для создания «монитора веб-пакетов» — инструмента, интегрированного в процесс разработки, который может отслеживать сборки проекта и дайте, как, когда, где и почему любые потенциальные проблемы раздувания. Об этом в другой раз, а вот краткий обзор…

Плагины

Программой, которую я впервые выбрал, когда начинал с JS, был генератор статических сайтов Metalsmith, который почти полностью полагается на плагины. Хотя в webpack происходит намного больше, на первый взгляд это то же самое. Плагины выполняют тяжелую работу, и создание собственного — отличный способ получить доступ и изучить внутреннюю работу webpack. Вот оченьосновное руководство.

Плагины Webpack — это конструкторы/классы.

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

Плагины должны иметь метод «применить».

Когда webpack запускает плагин, он выгружает объект компилятора в приложение и запускает его. Внутри применения у вас есть доступ к компилятору и внутренностям веб-пакета.

Объект компилятора

Объект компилятора огромен, и в нем у вас есть доступ ко всему жизненному циклу компиляции веб-пакета. Что очень много. Но по большей части, если вы пишете плагин, вам нужен метод плагина.

Метод компилятора.plugin

ОК, мы подходим. Методу плагина передается несколько вещей:

  1. Хук жизненного цикла — определяет, что доступно для обратного вызова, и момент в процессе сборки, в котором он запускается. Список см. в документах webpack.
  2. Обратный вызов — он запускается, когда создается указанное событие, и событие, которое вы слушаете, будет определять, что будет передано в обратный вызов.

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

Объект компиляции

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

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

Что теперь?

Как только вы окажетесь внутри среды выполнения веб-пакета, вы сможете делать практически все, что хотите, с любой частью веб-пакета, которую хотите. Навигация по различным открытым объектам и методам может быть совершенно ошеломляющей, но сосредоточьтесь только на нескольких, и возможности откроются.

Было увлекательно побывать под капотом такой ключевой части современной веб-разработки. Огромное спасибо команде webpack за невероятный продукт.

Это то, над чем мы работаем. В настоящее время он находится на очень ранней стадии!