Webpack — nedir, mimarisi ve çalışma prensibi

Yazar: IT Sectr Yayınlanma: 2026-05-19 Okuma süresi: 8 dk

Webpack, JavaScript uygulamaları oluşturmak için fiili standart haline gelmiş güçlü bir açık kaynak paketleyicidir. Bağımlılıkları olan modülleri alır ve tarayıcı veya başka bir çalışma zamanı ortamı için optimize edilmiş statik kaynaklar üretir. Webpack Documentation (2026)'ya göre, ekosistem her türlü derleme görevi için 15 binden fazla loader ve eklentiye sahiptir.

Önemli Noktalar

  • Webpack, bağımlılık grafiği oluşturan ve optimize edilmiş çıktı dosyaları üreten bir JavaScript paketleyicisidir.
  • Entry, Webpack'in uygulamanın bağımlılık grafiğini oluşturmaya başladığı giriş noktasıdır.
  • Loaders, farklı türdeki dosyaları (TypeScript, SCSS, resimler) grafiğe eklemeden önce işleyen dönüşümlerdir.
  • Plugins, ek görevler gerçekleştiren uzantılardır: küçültme, HTML enjeksiyonu, ortam değişkeni yönetimi.
  • Code Splitting, ilk yüklemeyi hızlandırmak için paketin isteğe bağlı olarak yüklenen parçalara bölünmesidir.

Webpack nedir?

Webpack, uygulama bağımlılıklarını analiz eden ve bunları tarayıcı veya sunucu için statik dosyalara paketleyen bir modül paketleyicisidir. 2012 yılında Tobias Koppers tarafından oluşturulan Webpack, tüm dosyalar modüldür konsepti sayesinde hızla derleme standardı haline geldi: JavaScript, CSS, resimler, yazı tipleri ve hatta HTML, tek bir loader sistemi aracılığıyla işlenir.

Webpack neden endüstri standardı haline geldi

Webpack, zamanına göre devrim niteliğinde bir fikir getirdi: loader'lar, import veya require aracılığıyla herhangi bir kaynağı dahil etmenize olanak tanır. Bu, geliştiricileri CSS ön işlemcileri (SCSS), TypeScript derleyicileri ve görüntü optimize edicileri için ayrı araçlar kullanma zorunluluğundan kurtardı. 2020 yılına kadar JavaScript projelerinin %80'inden fazlası Webpack kullanıyordu (npm istatistik verileri: 2019–2024).

Rakipler — Vite, Parcel ve Turbopack — daha hızlı geliştirme sunar, ancak Webpack, kararlılığı, olgun ekosistemi ve geriye dönük uyumluluğu sayesinde kurumsal segmentte liderliğini sürdürmektedir. Büyük projelerde Webpack'ten Vite'ye geçiş haftalar alır ve genellikle eklenti uyumsuzluğu nedeniyle engellenir.

Webpack nasıl çalışır

Webpack, giriş noktasından başlayarak bir bağımlılık grafiği oluşturur. Bulunan her import veya require grafiğe eklenir, bir loader zincirinden geçer ve bir parçaya yerleştirilir. Nihai çıktı, yapılandırmaya bağlıdır: tek bir paket, birden çok parça veya UMD, CommonJS veya ES Module formatlarında kitaplık çıktısı.

Webpack derleme süreci

js
// Minimum Webpack 5 yapılandırması
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, dosya sistemi tabanlı yerleşik bir önbellek sunarak yeniden derlemeleri 2–5 kat hızlandırdı. Kalıcı önbellekleme, modül dönüştürme sonuçlarını çalıştırmalar arasında kaydeder; bu, CI/CD'de özellikle önemlidir. Etkinleştirmek için yapılandırmaya cache: { type: 'filesystem' } eklemeniz yeterlidir.

Webpack temel kavramları

Webpack dört temel kavramla çalışır: Entry (giriş noktası), Output (çıktı), Loaders (dönüşümler) ve Plugins (uzantılar). Bu kavramları anlamak, basit bir siteden karmaşık bir kurumsal uygulamaya kadar herhangi bir derlemeyi yapılandırmak için gereklidir.

Entry, Output ve modlar

Entry, bir veya daha fazla giriş noktasını tanımlayan bir dizi veya nesnedir. Çoklu giriş, çok bileşenli uygulamalar için kullanılır. Output, çıktı dosyalarını yapılandırır: yol, ad şablonu, genel URL. Modedevelopment, production veya none — her mod için otomatik olarak optimum eklentileri ve varsayılan değerleri etkinleştirir.

Content Hash — dosya adına bir içerik karması ([contenthash]) dahil etmek, uzun süreli önbellekleme sağlar. Tarayıcı, yalnızca içeriği değiştiğinde yeni bir dosya yükler. SplitChunksPlugin, farklı giriş noktalarındaki ortak bağımlılıkları otomatik olarak ayrı parçalara çıkararak kod tekrarını önler.

Loaders ve Plugins

Loaders, kaynak dosyaları bağımlılık grafiğine eklemeden önce dönüştürür. Her loader, dosya içeriğini alan ve bir JavaScript modülü döndüren bir işlevdir. Plugins, başlangıçtan çıktı dosyası oluşturmaya kadar tüm derleme yaşam döngüsüne erişimi olan daha güçlü uzantılardır.

Popüler loader'lar ve amaçları

LoaderAmaçKullanım durumu
babel-loaderES6+/JSX'i ES5'e dönüştürmeJSX ile React bileşenleri
ts-loaderTypeScript'i JavaScript'e derlemeAngular, TypeScript projeleri
css-loaderCSS'de @import ve url() işlemeCSS modülleri, PostCSS
sass-loaderSCSS/SASS'i CSS'ye dönüştürmeBootstrap, özel temalar
file-loaderDosyaları çıktıya kopyalamaResimler, yazı tipleri
svg-inline-loaderSVG'yi JavaScript'e satır içi eklemeSimgeler, logolar

Plugins, loader'ların aksine, derlemenin herhangi bir aşamasında eylem gerçekleştirebilir. HtmlWebpackPlugin, bağlantılı komut dosyalarıyla otomatik olarak bir HTML dosyası oluşturur. MiniCssExtractPlugin, paralel yükleme için CSS'i ayrı dosyalara çıkarır. DefinePlugin, derleme sırasında ortam değişkenlerini uygulama koduna aktarmaya olanak tanır.

Webpack derleme optimizasyonu

Webpack, yerleşik optimizasyon mekanizmaları sağlar: tree shaking, code splitting ve sıkıştırma. Tree shaking, ES modüllerinden kullanılmayan dışa aktarımları kaldırır. Code splitting, import() aracılığıyla paketi dinamik parçalara böler. Minimizer — JS için TerserPlugin ve CSS için CssMinimizerPlugin.

Gelişmiş optimizasyon teknikleri

js
// webpack.config.js — production derleme optimizasyonu
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, mikro ön yüzler için Webpack 5'in en güçlü özelliğidir. Çalışma zamanında diğer bağımsız derlemelerden modüller yüklemeye olanak tanır. Her mikro uygulama bağımsız olarak geliştirilir ve dağıtılır, ancak kullanıcı için tek bir arayüzde birleştirilir. Segment Analytics, 2021'den beri üretimde Module Federation kullanmakta ve dağıtım süresini %80 oranında azaltmaktadır.

React Native ve web projeleri için Webpack

Webpack, React Native'de doğrudan nadiren kullanılır — bunun için Metro vardır. Ancak Webpack, tek bir kod tabanının hem mobil platformlar (Metro aracılığıyla) hem de web (Webpack aracılığıyla) için derlendiği React Native Web projelerinde kullanılır. Webpack ayrıca Ionic ve Cordova ile hibrit uygulamalarda da popülerdir.

Platformlar arası derleme için Webpack

Web oluşturma için React Native Web'in kullanıldığı projelerde Webpack, yerel modülleri web uygulamalarıyla değiştiren takma adlarla yapılandırılır. Alias react-nativereact-native-web, içe aktarmaları değiştirmeden paylaşılan bileşenleri kullanmaya olanak tanır. DefinePlugin, platforma özgü kodun koşullu derlenmesi için bir platform bayrağı iletir.

Mobil web için Webpack optimizasyonu, masaüstünden farklıdır. Mobil öncelikli derleme, agresif küçültme, görüntülerin geç yüklenmesi ve kritik CSS'in öncelikli olarak yüklenmesini içerir. CompressionPlugin brotli sıkıştırma ile 3G/4G mobil ağlar için paket boyutunu %20–25 oranında azaltır. Farklı platformlar için yapılandırmaları bölmek amacıyla webpack-merge kullanın: mobil öncelikli ve masaüstü için optimize edilmiş derlemeler.

Webpack 5 Module Federation: Mikro ön yüzler

Module Federation, npm'de yayınlamadan diğer bağımsız derlemelerden JavaScript modülleri yüklemeye olanak tanıyan, Webpack 5'in devrim niteliğindeki bir özelliğidir. Her mikro uygulama bağımsız olarak geliştirilir, kendi Webpack yapılandırmasına sahiptir ve ayrı olarak dağıtılır. Host uygulaması, ModuleFederationPlugin'in özel bir yapılandırması aracılığıyla uzak derlemelerden modülleri bağlar.

Sağlayıcı, seçilen modülleri kullanıma sunar ve ana bilgisayar bunları bağlamak için remotes kullanır. Module Federation, paylaşılan kitaplıkları destekler: React iki mikro uygulamada kullanılıyorsa, Webpack onu yalnızca bir kez yükler. Bu, kullanıcı için %60'a kadar trafik tasarrufu sağlar. Segment ve Best Buy dahil büyük şirketler, Module Federation'ı üretimde kullanarak dağıtım süresini saatlerden dakikalara indirmiştir.

Yaygın sorunlar ve çözümleri

Module Federation ile çalışırken, geliştiriciler sıklıkla farklı sürümlerdeki paylaşılan bağımlılıkların çakışmalarıyla karşılaşır. Çözüm, kritik kitaplıklar için açıkça requiredVersion ve singleton: true belirtmektir. Diğer bir sorun, özellikle React Context ve Redux ile uzak bir derlemeden bileşen içe aktarırken bağlam kaybıdır. Bunu çözmek için, tüm mikro uygulamaların tek bir React örneği kullanmasını sağlamak amacıyla shared: { react: { singleton: true } } kullanın. Büyük mikro ön yüz mimarileri için, paylaşılan bağımlılıkların sürümlerini senkronize etmek ve derleme tutarlılığını sağlamak amacıyla Module Federation'ın bir monorepo sistemi (Nx, Turborepo) ile birlikte kullanılması önerilir.

Sıkça sorulan sorular

Webpack 5 ile Webpack 4 arasındaki fark nedir?

Webpack 5, kalıcı önbellekleme (yeniden derlemeleri 5 kata kadar hızlandırma), mikro ön yüzler için Module Federation desteği ve otomatik clean çıktısı getirdi. Eski loader'lar (raw-loader, url-loader) ve birçok Node.js polyfill'i kaldırılarak yapılandırma boyutu ortalama %30 azaltıldı.

Webpack yapılandırma boyutu nasıl azaltılır?

Temel yapılandırma oluşturmak için webpack-cli init kullanın. Tipik projeler için, Webpack yapılandırmasını gizleyen create-react-app (CRA) veya Next.js kullanın. Özel kurulum gerekiyorsa — webpack-merge, yapılandırmayı farklı ortamlar için yeniden kullanılabilir modüllere ayırmanıza olanak tanır.

Webpack Dev Server nedir?

Webpack Dev Server, HMR (Hot Module Replacement) destekli yerleşik bir geliştirme sunucusudur. Dosya değişikliklerini izler ve sayfayı tamamen yeniden yüklemeden tarayıcıdaki modülleri günceller. Mobil geliştirme için, geliştirme sunucusu host: '0.0.0.0' ve bir HTTPS sertifikası belirtilerek yerel ağ üzerinden erişilebilir olacak şekilde yapılandırılabilir.

Webpack görüntüleri nasıl işler?

Webpack 5, görüntü işleme için yerleşik Asset Modules kullanır: asset/resource dosyayı olduğu gibi kopyalar, asset/inline onu base64 olarak satır içine alır (8KB'den küçük dosyalar için), asset boyuta göre otomatik olarak seçer. Görüntü optimizasyonu için, WebP sıkıştırma ve kayıpsız optimizasyon ile image-webpack-loader ekleyin.

Webpack'ten Vite'ye geçmeli miyim?

Yeni projeler için — evet, Vite önemli bir hız artışı sağlar. Yüzlerce Webpack eklentisi olan mevcut kurumsal projeler için — geçiş 2–4 hafta sürebilir. Geliştirme derleme hızının ne kadar kritik olduğunu değerlendirin: tam derleme süresi 5 dakikayı aşarsa, geçiş haklıdır.

Özet

  • Webpack, en büyük loader ve eklenti ekosistemine sahip evrensel bir JavaScript paketleyicisidir.
  • Entry, Output, Loaders ve Plugins, herhangi bir derleme yapılandırmasını tanımlayan dört temel kavramdır.
  • Loaders, dosyaları (TypeScript, SCSS, JSX) bağımlılık grafiğine eklemeden önce dönüştürür.
  • Plugins, Webpack işlevselliğini derleme yaşam döngüsünün tüm aşamalarında genişletir.
  • Code Splitting ve Tree Shaking, kullanılmayan kodu kaldırarak ve geç yükleyerek paket boyutunu azaltır.
  • Module Federation, çalışma zamanında farklı derlemelerden modüller yüklemeye olanak tanıyan bir mikro ön yüz teknolojisidir.
  • Yeni projeler için Vite'yi değerlendirin, mevcut kurumsal çözümler için Webpack istikrarlı bir seçim olmaya devam etmektedir.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun