Завантажувачі Webpack vs плагінів; яка різниця?


104

Яка різниця між завантажувачами та плагінами в webpack?

Документація для плагінів просто говорить:

Використовуйте плагіни, щоб додати функціональні можливості, зазвичай пов'язані з пакетами в webpack.

Я знаю, що babel використовує завантажувач для перетворень jsx / es2015, але, схоже, інші поширені завдання (наприклад, copy-webpack-plugin) використовують плагіни.


2
Навантажувач перетворює файли на js, впізнаваний (і робить щось під час трансформації), плагіни можуть робити все, що їм потрібно, на виході завантажувачів.
Девід Гуан

Відповіді:


61

Завантажувачі попередньо обробляють перетворення практично будь-якого формату файлів, коли ви використовуєте sth, як require("my-loader!./my-awesome-module")у своєму коді. Порівняно з плагінами вони досить прості, оскільки вони (a) піддають веб-упаковці лише одну функцію, і (b) не здатні впливати на фактичний процес збирання.

Плагіни з іншого боку можуть глибоко інтегруватися в webpack, оскільки вони можуть реєструвати гачки в системі побудови веб-пакетів та отримувати доступ (і змінювати) компілятор, і як він працює, а також компіляцію. Тому вони більш потужні, але й важче утримувати.


чому завантажувач не може глибоко інтегруватися з webpack?
Нітін.

@NitinTyagi Тому, що це робота плагінів. Мета навантажувачів - бути простим.
helt

152

Додавання додаткової та простішої відповіді.

Навантажувачі:

Завантажувачі працюють на рівні окремих файлів під час або до створення пакета .

Плагіни:

Плагіни працюють на рівні розшарування або шматка і зазвичай працюють в кінці процесу формування пакету. Плагіни також можуть змінювати, як створюються самі пакети. Плагіни мають більш потужне управління, ніж навантажувачі.

Тільки для прикладу ви чітко бачите на зображенні нижче, де працюють навантажувачі та де працюють плагіни -

введіть тут опис зображення Список літератури: стаття та зображення


34
Молодці! Два простих речення, і я зараз розумію різницю. Тепер перейдіть, щоб переписати цілу бібліотеку документів для веб-пакетів, оскільки це абсолютно незрозуміла хитрість.
rism

15

По суті, webpack - це лише файловий пакет. Зважаючи на дуже простий сценарій (без поділу коду), це може означати лише такі дії (на високому рівні):

  1. знайти вхідний файл і завантажити його вміст у пам'ять
  2. співставити певний текст у вмісті та оцінити його (наприклад, @import)
  3. знайти залежності на основі попереднього оцінювання і зробити те ж саме з ними
  4. зшийте їх усіх у пучок пам’яті
  5. записати результати у файлову систему

Коли ви уважно вивчаєте вищезазначені кроки, це перегукується з тим, що робить компілятор Java (або будь-який компілятор). Існують відмінності, але вони не мають значення для розуміння завантажувачів і плагінів.


Навантажувачі:

тут, тому що webpack обіцяє об'єднати будь-який тип файлу.

Оскільки вебпакет по своїй суті здатний лише для згрупування js-файлів, ця обіцянка означала, що основна команда webpack повинна включати потоки збирання, які дозволяють зовнішньому коду трансформувати певний тип файлу таким чином, щоб веб-пакет міг споживати.

Ці зовнішні коди називаються навантажувачами, і вони, як правило, працюють під час 1 та 3 вище. Таким чином, оскільки етап, на якому ці навантажувачі потрібно запустити, очевидний, їм не потрібні гачки і вони також не впливають на процес збирання (оскільки збірка або пачка відбувається лише на етапі 4).

Тож навантажувачі готують етап до компіляції, і вони наче розширюють гнучкість компілятора webpack.


Плагіни:

тут, тому що навіть хоча webpack прямо не обіцяє змінний вихід, світ хоче цього, а webpack це дозволяє.

Оскільки веб-пакет по своїй суті є лише пакетом, але при цьому він проходить через кілька кроків і під-кроків, ці кроки можна використовувати для створення додаткової функціональності.

Процес нарощування виробництва (мінімізація та запис у файлову систему), який є властивістю компілятора webpack, наприклад, може розглядатися як розширення його основної спроможності (яка є лише пакетом) і може трактуватися як нативний плагін. Якби вони цього не надали, це зробив би хтось інший.

Якщо дивитися на вбудований плагін вище, схоже, що пакетне чи компіляція веб-пакунків може бути розбита на процес основного пакету, а також безліч нативних процесів, які ми можемо вимкнути або налаштувати чи розширити. Це означало, що зовнішній код може приєднуватися до процесу з’єднання у певних точках, які вони можуть обрати (звані гачками).

Отже, плагіни впливають на вихід та щось розширюють можливості компілятора webpack.


1
Чудова відповідь, насправді малює яскраву картину
Robotron

Мені дуже подобається ця відповідь. Це дає вам певне пояснення, щоб можна було міркувати. Не просто визначення, а розуміння.
Дазаг

1

Навантажувачі працюють на рівні файлів . Вони можуть писати шаблон, обробляти якийсь код, щоб перекласти його залежно від вашої зручності тощо.

Плагіни працюють на системному рівні . Вони можуть працювати над шаблоном, обробкою файлової системи (ім'я, шлях) тощо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.