По своей сути webpack - это просто сборщик файлов. Учитывая очень простой сценарий (без разделения кода), это может означать только следующие действия (на высоком уровне):
- найти входной файл и загрузить его содержимое в память
- сопоставить определенный текст в контенте и оценить его (например, @import)
- найдите зависимости на основе предыдущей оценки и сделайте то же самое с ними
- сшить их все в связку в памяти
- записать результаты в файловую систему
Если вы внимательно изучите вышеуказанные шаги, это перекликается с тем, что делает компилятор Java (или любой другой компилятор). Конечно, есть различия, но они не имеют значения для понимания загрузчиков и плагинов.
Погрузчики:
здесь, потому что webpack обещает объединить файлы любого типа.
Поскольку webpack в своей основе способен только связывать файлы js, это обещание означало, что основная команда webpack должна была включить потоки сборки, которые позволили внешнему коду преобразовывать определенный тип файла таким образом, чтобы его мог использовать webpack.
Этот внешний код называется загрузчиками и обычно запускается на шагах 1 и 3 выше. Таким образом, поскольку этап, на котором эти загрузчики должны запускаться, очевиден, им не требуются перехватчики и они не влияют на процесс сборки (поскольку сборка или сборка происходит только на шаге 4).
Таким образом, загрузчики готовят почву для компиляции и как бы расширяют гибкость компилятора webpack.
Плагины:
здесь, потому что, хотя webpack напрямую не обещает переменный вывод, мир этого хочет, и webpack позволяет это.
Поскольку webpack по своей сути является просто сборщиком пакетов и при этом проходит несколько этапов и подэтапов, эти шаги можно использовать для создания дополнительных функций.
Процесс производственной сборки (минимизация и запись в файловую систему), который является встроенной возможностью компилятора webpack, например, может рассматриваться как расширение его основных возможностей (которое просто объединяется) и может рассматриваться как собственный плагин. Если бы они этого не сделали, это сделал бы кто-то другой.
Глядя на нативный плагин выше, кажется, что объединение или компиляция веб-пакетов можно разбить на основной процесс связывания плюс множество собственных процессов плагинов, которые мы можем отключить, настроить или расширить. Это означало, что внешнему коду разрешалось подключаться к процессу связывания в определенных точках, из которых они могли выбирать (так называемые перехватчики).
Таким образом, плагины влияют на вывод и как бы расширяют возможности компилятора webpack.