Webpack — výkonný open-source bundler, který se stal de facto standardem pro sestavování JavaScriptových aplikací. Přijímá moduly se závislostmi a generuje statické zdroje optimalizované pro prohlížeč nebo jiné běhové prostředí. Podle Webpack Documentation (2026) má ekosystém více než 15 tisíc loaderů a pluginů pro jakýkoli úkol sestavení.
Hlavní
Webpack — je modulární bundler, který analyzuje závislosti aplikace a zabaluje je do statických souborů pro prohlížeč nebo server. Vytvořen Tobiasem Koppersem v roce 2012, Webpack se rychle stal standardem sestavení díky konceptu všechny soubory jsou moduly: JavaScript, CSS, obrázky, písma a dokonce i HTML jsou zpracovávány prostřednictvím jednotného systému loaderů.
Webpack navrhl revoluční nápad pro svou dobu: loadery umožňují připojit jakékoli zdroje pomocí import nebo require. To osvobodilo vývojáře od potřeby používat samostatné nástroje pro CSS preprocesory (SCSS), TypeScript kompilátory a optimalizátory obrázků. Do roku 2020 používalo Webpack více než 80% JavaScriptových projektů (údaje npm stat: 2019–2024).
Konkurenti — Vite, Parcel a Turbopack — nabízejí vyšší rychlost vývoje, ale Webpack si udržuje vedení v enterprise segmentu díky stabilitě, vyspělému ekosystému a zpětné kompatibilitě. Migrace z Webpacku na Vite ve velkých projektech trvá týdny a často je blokována nekompatibilitou pluginů.
Webpack vytváří graf závislostí, počínaje vstupním bodem. Každý nalezený import nebo require je přidán do grafu, prochází řetězcem loaderů a je umístěn do chunku. Konečný výstup závisí na konfiguraci: jeden bundle, několik chunků nebo knihovní výstup ve formátech UMD, CommonJS nebo ES Module.
// Minimální konfigurace Webpacku 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 představil vestavěnou mezipaměť založenou na systému souborů, která urychluje opakovaná sestavení 2–5krát. Persistent caching ukládá výsledky transformace modulů mezi spuštěními, což je obzvláště důležité v CI/CD. Pro aktivaci stačí přidat cache: { type: 'filesystem' } do konfigurace.
Webpack pracuje se čtyřmi základními koncepty: Entry (vstupní bod), Output (výstup), Loaders (transformace) a Plugins (rozšíření). Porozumění těmto konceptům je nezbytné pro konfiguraci jakéhokoli sestavení, od jednoduchého webu po složitou enterprise aplikaci.
Entry — pole nebo objekt definující jeden nebo více vstupních bodů. Multi-entry se používá pro vícekomponentní aplikace. Output — nastavení výstupních souborů: cesta, šablona názvu, veřejné URL. Mode — development, production nebo none — automaticky aktivuje optimální pluginy a výchozí hodnoty pro každý režim.
Content Hash — přidání hash obsahu do názvu souboru ([contenthash]) zajišťuje dlouhodobé ukládání do mezipaměti. Prohlížeč načte nový soubor pouze při změně jeho obsahu. SplitChunksPlugin automaticky extrahuje společné závislosti z různých entry do samostatných chunků, čímž zabraňuje duplikaci kódu.
Loadery transformují zdrojové soubory před přidáním do grafu závislostí. Každý loader je funkce, která přijímá obsah souboru a vrací modul JavaScript. Pluginy — výkonnější rozšíření, která mají přístup k celému životnímu cyklu sestavení: od spuštění po generování výstupních souborů.
| Loader | Účel | Příklad použití |
|---|---|---|
| babel-loader | Transpilace ES6+/JSX do ES5 | React komponenty s JSX |
| ts-loader | Kompilace TypeScriptu do JavaScriptu | Angular, TypeScript projekty |
| css-loader | Zpracování @import a url() v CSS | CSS moduly, PostCSS |
| sass-loader | Transpilace SCSS/SASS do CSS | Bootstrap, vlastní motivy |
| file-loader | Kopírování souborů do výstupu | Obrázky, písma |
| svg-inline-loader | Vložení SVG do JavaScriptu | Ikony, loga |
Pluginy na rozdíl od loaderů mohou jednat v jakékoli fázi sestavení. HtmlWebpackPlugin automaticky generuje HTML soubor s připojenými skripty. MiniCssExtractPlugin extrahuje CSS do samostatných souborů pro paralelní načítání. DefinePlugin umožňuje předávat proměnné prostředí do kódu aplikace během sestavení.
Webpack poskytuje vestavěné mechanismy optimalizace: tree shaking, code splitting a kompresi. Tree shaking odstraňuje nepoužívaný export z ES modulů. Code splitting pomocí import() rozděluje bundle na dynamické chunky. Minimizer — TerserPlugin pro JS a CssMinimizerPlugin pro CSS.
// webpack.config.js — optimalizace produkčního sestavení
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 — nejsilnější funkce Webpacku 5 pro mikrofrontendy. Umožňuje načítat moduly z jiných nezávislých sestavení za běhu. Každá mikroaplikace je vyvíjena a nasazována nezávisle, ale pro uživatele se spojuje do jednoho rozhraní. Segment Analytics používá Module Federation v produkci od roku 2021, čímž zkrátila dobu nasazení o 80%.
Webpack se zřídka používá přímo v React Native — k tomu slouží Metro. Nicméně Webpack se používá v projektech React Native Web, kdy se jedna kódová základna sestavuje pro mobilní platformy (přes Metro) a web (přes Webpack). Webpack je také populární v hybridních aplikacích na Ionic a Cordova.
V projektech, kde se React Native Web používá pro webové vykreslování, se Webpack konfiguruje s aliase, které nahrazují nativní moduly webovými implementacemi. Alias react-native → react-native-web umožňuje používat sdílené komponenty bez změny importů. DefinePlugin předává příznak platformy pro podmíněnou kompilaci kódu specifického pro platformu.
Optimalizace Webpacku pro mobilní web se liší od desktopové. Mobile-first sestavení zahrnuje agresivní minifikaci, lazy loading obrázků a prioritní načítání kritického CSS. CompressionPlugin s brotli kompresí snižuje velikost bundle o 20–25% pro mobilní 3G/4G sítě. Použijte webpack-merge pro rozdělení konfigurací pro různé platformy: mobile-first a desktopově optimalizované sestavení.
Module Federation — revoluční funkce Webpacku 5, která umožňuje načítat moduly JavaScript z jiných nezávislých sestavení bez publikování v npm. Každá mikroaplikace je vyvíjena nezávisle, má vlastní konfiguraci Webpacku a je nasazována samostatně. Host aplikace připojuje moduly ze vzdálených sestavení prostřednictvím speciální konfigurace pluginu ModuleFederationPlugin.
Poskytovatel exposes vybrané moduly a host používá remotes pro jejich připojení. Module Federation podporuje sdílené knihovny: pokud je React použit ve dvou mikroaplikacích, Webpack jej načte pouze jednou. To přináší úspory provozu až 60% pro uživatele. Velké společnosti, včetně Segment a Best Buy, používají Module Federation v produkci, čímž zkrátily dobu nasazení z hodin na minuty.
Při práci s Module Federation se vývojáři často setkávají s konflikty shared závislostí různých verzí. Řešením je explicitně uvést requiredVersion a singleton: true pro kritické knihovny. Dalším problémem je ztráta kontextu při importu komponent ze vzdáleného sestavení, zejména s React Context a Redux. K vyřešení použijte shared: { react: { singleton: true } }, abyste zajistili, že všechny mikroaplikace používají stejnou instanci Reactu. Pro velké mikrofrontendové architektury se doporučuje používat Module Federation se systémem monorepozitářů (Nx, Turborepo) pro synchronizaci verzí sdílených závislostí a zajištění konzistence sestavení.
Často kladené otázky
Webpack 5 představil persistent caching (zrychlení opakovaných sestavení až 5x), vestavěnou podporu Module Federation pro mikrofrontendy a automatický clean výstup. Zastaralé loadery (raw-loader, url-loader) a mnoho polyfillů Node.js byly odstraněny, což snížilo velikost konfigurace v průměru o 30%.
Použijte webpack-cli init pro generování základní konfigurace. Pro typické projekty aplikujte create-react-app (CRA) nebo Next.js, které skrývají konfiguraci Webpacku. Pokud je potřeba vlastní konfigurace — webpack-merge umožňuje rozdělit konfiguraci na znovupoužitelné moduly pro různá prostředí.
Webpack Dev Server — vestavěný vývojový server s podporou HMR (Hot Module Replacement). Sleduje změny v souborech a aktualizuje moduly v prohlížeči bez úplného obnovení stránky. Pro mobilní vývoj lze vývojový server nakonfigurovat pro přístup prostřednictvím lokální sítě uvedením host: '0.0.0.0' a HTTPS certifikátu.
Webpack 5 používá vestavěné Asset Modules pro zpracování obrázků: asset/resource kopíruje soubor tak, jak je, asset/inline jej vkládá jako base64 (pro soubory menší než 8KB), asset vybírá automaticky na základě velikosti. Pro optimalizaci obrázků se přidává image-webpack-loader s kompresí WebP a bezeztrátovou optimalizací.
Pro nové projekty — ano, Vite poskytuje významný nárůst rychlosti. Pro stávající enterprise projekty se stovkami pluginů Webpacku — migrace může trvat 2–4 týdny. Zhodnoťte, jak kritická je rychlost vývojového sestavení: pokud čas úplného sestavení přesahuje 5 minut, migrace je oprávněná.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také