По суті, webpack - це лише файловий пакет. Зважаючи на дуже простий сценарій (без поділу коду), це може означати лише такі дії (на високому рівні):
- знайти вхідний файл і завантажити його вміст у пам'ять
- співставити певний текст у вмісті та оцінити його (наприклад, @import)
- знайти залежності на основі попереднього оцінювання і зробити те ж саме з ними
- зшийте їх усіх у пучок пам’яті
- записати результати у файлову систему
Коли ви уважно вивчаєте вищезазначені кроки, це перегукується з тим, що робить компілятор Java (або будь-який компілятор). Існують відмінності, але вони не мають значення для розуміння завантажувачів і плагінів.
Навантажувачі:
тут, тому що webpack обіцяє об'єднати будь-який тип файлу.
Оскільки вебпакет по своїй суті здатний лише для згрупування js-файлів, ця обіцянка означала, що основна команда webpack повинна включати потоки збирання, які дозволяють зовнішньому коду трансформувати певний тип файлу таким чином, щоб веб-пакет міг споживати.
Ці зовнішні коди називаються навантажувачами, і вони, як правило, працюють під час 1 та 3 вище. Таким чином, оскільки етап, на якому ці навантажувачі потрібно запустити, очевидний, їм не потрібні гачки і вони також не впливають на процес збирання (оскільки збірка або пачка відбувається лише на етапі 4).
Тож навантажувачі готують етап до компіляції, і вони наче розширюють гнучкість компілятора webpack.
Плагіни:
тут, тому що навіть хоча webpack прямо не обіцяє змінний вихід, світ хоче цього, а webpack це дозволяє.
Оскільки веб-пакет по своїй суті є лише пакетом, але при цьому він проходить через кілька кроків і під-кроків, ці кроки можна використовувати для створення додаткової функціональності.
Процес нарощування виробництва (мінімізація та запис у файлову систему), який є властивістю компілятора webpack, наприклад, може розглядатися як розширення його основної спроможності (яка є лише пакетом) і може трактуватися як нативний плагін. Якби вони цього не надали, це зробив би хтось інший.
Якщо дивитися на вбудований плагін вище, схоже, що пакетне чи компіляція веб-пакунків може бути розбита на процес основного пакету, а також безліч нативних процесів, які ми можемо вимкнути або налаштувати чи розширити. Це означало, що зовнішній код може приєднуватися до процесу з’єднання у певних точках, які вони можуть обрати (звані гачками).
Отже, плагіни впливають на вихід та щось розширюють можливості компілятора webpack.