Webpack — моћан бандлер отвореног кода који је постао де факто стандард за билд JavaScript апликација. Он прихвата модуле са зависностима и генерише статичке ресурсе оптимизоване за претраживач или друго извршно окружење. Према Webpack Documentation (2026), екосистем броји преко 15 хиљада лоадера и плагина за сваки задатак билдовања.
Главно
Webpack — је бандлер модула који анализира зависности апликације и пакује их у статичке датотеке за претраживач или сервер. Креирао га је Тобијас Коперс 2012. године, Webpack је брзо постао стандард за билд захваљујући концепту све датотеке су модули: JavaScript, CSS, слике, фонтови, па чак и HTML се обрађују кроз јединствени систем лоадера.
Webpack је понудио револуционарну идеју за своје време: лоадери омогућавају повезивање било којих ресурса путем import или require. Ово је ослободило програмере потребе за коришћењем посебних алата за CSS препроцесоре (SCSS), TypeScript компилаторе и оптимизаторе слика. До 2020. године, преко 80% JavaScript пројеката је користило Webpack (подаци npm stat: 2019–2024).
Конкуренти — Vite, Parcel и Turbopack — нуде већу брзину развоја, али Webpack задржава лидерство у enterprise сегменту захваљујући стабилности, зрелом екосистему и уназад компатибилности. Миграција са Webpack-а на Vite у великим пројектима траје недељама и често је блокирана некомпатибилношћу плагина.
Webpack гради граф зависности, почињући од улазне тачке. Сваки пронађени import или require се додаје у граф, пролази кроз ланац лоадера и смјешта се у чанк. Коначни излаз зависи од конфигурације: један бандл, више чанкова или библиотечки излаз у UMD, CommonJS или ES Module форматима.
// Минимална конфигурација Webpack 5
const path = require('path');
module.exports = {
mode: 'production',
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: '[name].[contenthash:8].js',
clean: true,
},
module: {
rules: [
{ test: /\.ts$/, use: 'ts-loader', exclude: /node_modules/ },
],
},
optimization: {
splitChunks: {
chunks: 'all',
cacheGroups: { vendor: { test: /[\\/]node_modules[\\/]/, filename: 'vendor.[contenthash:8].js' } },
},
},
};
Webpack 5 је увео уграђени кеш заснован на фајл систему, који убрзава поновно билдовање 2–5 пута. Persistent caching чува резултате трансформације модула између покретања, што је посебно важно у CI/CD. За укључивање је довољно додати cache: { type: 'filesystem' } у конфигурацију.
Webpack оперише са четири основна концепта: Entry (улазна тачка), Output (излаз), Loaders (трансформације) и Plugins (проширења). Разумевање ових концепата је потребно за подешавање било којег билда, од једноставног сајта до сложене enterprise апликације.
Entry — низ или објекат који дефинише једну или више улазних тачака. Multi-entry се користи за вишекомпонентне апликације. Output — подешавање излазних датотека: путања, шаблон имена, јавни URL. Mode — development, production или none — аутоматски укључује оптималне плагине и подразумеване вриједности за сваки режим.
Content Hash — укључивање хеша садржаја у име датотеке ([contenthash]) осигурава дугорочно кеширање. Претраживач учитава нову датотеку само кад се њен садржај промијени. SplitChunksPlugin аутоматски издваја заједничке зависности из различитих entry-а у посебне чанкове, спречавајући дуплирање кода.
Loaders трансформишу изворне датотеке пре додавања у граф зависности. Сваки лоадер је функција која прима садржај датотеке и враћа JavaScript модул. Plugins — моћнија проширења која имају приступ целокупном животном циклусу билда: од покретања до генерисања излазних датотека.
| Loader | Намјена | Примјер коришћења |
|---|---|---|
| babel-loader | Транспилација ES6+/JSX у ES5 | React компоненте са JSX |
| ts-loader | Компилација TypeScript-а у JavaScript | Angular, TypeScript пројекти |
| css-loader | Обрада @import и url() у CSS-у | CSS модули, PostCSS |
| sass-loader | Транспилација SCSS/SASS у CSS | Bootstrap, прилагођене теме |
| file-loader | Копирање датотека у output | Слике, фонтови |
| svg-inline-loader | Уграђивање SVG-а у JavaScript | Иконице, логотипи |
Plugins, за разлику од лоадера, могу да делују у било којој фази билда. HtmlWebpackPlugin аутоматски генерише HTML датотеку са повезаним скриптама. MiniCssExtractPlugin издваја CSS у посебне датотеке за паралелно учитавање. DefinePlugin омогућава прослеђивање промењивих окружења у код апликације током билда.
Webpack пружа уграђене механизме оптимизације: tree shaking, code splitting и компресију. Tree shaking уклања некориштени експорт из ES модула. Code splitting путем import() дели бандл на динамичке чанкове. Minimizer — TerserPlugin за JS и CssMinimizerPlugin за CSS.
// webpack.config.js — оптимизација production билда
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
const TerserPlugin = require('terser-webpack-plugin');
module.exports = {
optimization: {
minimize: true,
minimizer: [
new TerserPlugin({
terserOptions: { compress: { drop_console: true }, mangle: true },
}),
new CssMinimizerPlugin(),
],
runtimeChunk: 'single',
splitChunks: {
chunks: 'async',
minSize: 20000,
maxAsyncRequests: 30,
},
},
};
Module Federation — најмоћнија функција Webpack 5 за микрофронтендове. Омогућава учитавање модула из других независних билдова у рантиму. Свака микроапликација се развија и поставља независно, али се спаја у јединствени интерфејс за корисника. Segment Analytics користи Module Federation у производњи од 2021. године, смањујући време постављања за 80%.
Webpack се ретко користи директно у React Native-у — за то постоји Metro. Ипак, Webpack се примењује у React Native Web пројектима када се једна база кода гради за мобилне платформе (путем Metro-а) и веб (путем Webpack-а). Webpack је такође популаран у хибридним апликацијама на Ionic и Cordova.
За пројекте где се React Native Web користи за веб рендеровање, Webpack се конфигурише са алијасима који замењују нативне модуле веб имплементацијама. Alias react-native → react-native-web омогућава коришћење заједничких компонената без промене импорта. DefinePlugin прослеђује значку платформе за условну компилацију кода специфичног за платформу.
Оптимизација Webpack-а за мобилни веб се разликује од десктопне. Mobile-first билд укључује агресивну минификацију, lazy loading слика и приоритетно учитавање критичног CSS-а. CompressionPlugin са brotli компресијом смањује величину бандла за 20–25% за мобилне 3G/4G мреже. Користите webpack-merge за поделу конфигурација за различите платформе: mobile-first и десктоп-оптимизовано билдовање.
Module Federation — револуционарна функција Webpack 5, која омогућава учитавање JavaScript модула из других независних билдова без објављивања у npm-у. Свака микроапликација се развија независно, има сопствену Webpack конфигурацију и поставља се одвојено. Host апликација повезује модуле са удаљених билдова путем специјалне конфигурације плагина ModuleFederationPlugin.
Добављач exposes изабране модуле, а хост користи remotes за њихово повезивање. Module Federation подржава дијељене библиотеке: ако се React користи у двије микроапликације, Webpack ће га учитати само једном. Ово даје уштеду саобраћаја до 60% за корисника. Велике компаније, укључујући Segment и Best Buy, користе Module Federation у производњи, смањујући време постављања са сати на минуте.
При раду са Module Federation-ом, програмери често наилазе на конфликте shared зависности различитих верзија. Решење — јасно навести requiredVersion и singleton: true за критичне библиотеке. Други проблем — губитак контекста при импорту компонената из удаљеног билда, посебно са React Context и Redux. За решавање користите shared: { react: { singleton: true } } да бисте осигурали да све микроапликације користе исту инстанцу React-а. За велике микрофронтендске архитектуре препоручује се коришћење Module Federation-а са системом монорепозиторијума (Nx, Turborepo) за синхронизацију верзија заједничких зависности и обезбјеђивање конзистентности билдова.
Често постављана питања
Webpack 5 је увео persistent caching (убрзавање поновних билдова до 5 пута), уграђену подршку за Module Federation за микрофронтендове и аутоматски clean output. Застарели лоадери (raw-loader, url-loader) и многи Node.js полифилови су уклоњени, што је смањило величину конфигурације у просеку за 30%.
Користите webpack-cli init за генерисање основне конфигурације. За типске пројекте примјењујте create-react-app (CRA) или Next.js, који сакривају Webpack конфигурацију. Ако је потребна прилагођена конфигурација — webpack-merge омогућава поделу конфигурације на вишекратно употребљиве модуле за различите окружења.
Webpack Dev Server — уграђени дев сервер са подршком за HMR (Hot Module Replacement). Прати промјене у датотекама и ажурира модуле у претраживачу без потпуног поновног учитавања странице. За мобилни развој, дев сервер се може подесити за приступ путем локалне мреже наводењем host: '0.0.0.0' и HTTPS сертификата.
Webpack 5 користи уграђене Asset Modules за обраду слика: asset/resource копира датотеку как јесте, asset/inline је уграђује као base64 (за датотеке мање од 8KB), asset бира аутоматски на основу величине. За оптимизацију слика додаје се image-webpack-loader са WebP компресијом и безгубитком оптимизацијом.
За нове пројекте — да, Vite пружа значајно повећање брзине. За постојеће enterprise пројекте са стотинама Webpack плагина — миграција може трајати 2–4 недеље. Процијените колико је брзина дев билда критична: ако време пуног билда прелази 5 минута, миграција је оправдана.
Закључак
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође