Vite ile webpack arasındaki temel fark nedir? Tree shaking nasıl çalışır, neden bazen çalışmaz?

Cevap

webpack geliştirme sırasında da tüm uygulamayı bundle'lar; proje büyüdükçe başlangıç ve HMR yavaşlar. Vite ise geliştirmede bundle yapmaz: kaynak dosyaları tarayıcıya native ES module olarak sunar, sadece istenen dosyayı anında dönüştürür ve node_modules bağımlılıklarını önceden paketler. Production build'de ise optimize bir bundle üretir. Vite 7'ye kadar dev'de esbuild, build'de Rollup kullanılıyordu; Vite 8 (Mart 2026) ile ikisinin yerini Rust tabanlı tek bundler Rolldown aldı.

webpackVite
Dev serverÖnce bundle, sonra sunNative ESM, isteğe bağlı dönüşüm
BaşlangıçProjeyle büyürNeredeyse sabit
HMRBundle'ın parçasını yeniden oluştururSadece değişen modül
KonfigürasyonEsnek ama karmaşık (loader/plugin)Mantıklı varsayılanlar
EkosistemÇok olgun, Module FederationHızla büyüyen, Rollup uyumlu eklentiler

Rspack (webpack uyumlu, Rust) ve Turbopack (Next.js 16'da varsayılan) de alternatiflerdir.

Tree shaking

Bundler, ES module import/export ifadelerini statik analiz ederek hiç kullanılmayan export'ları çıktıdan atar.

import { debounce } from "lodash-es"; // sadece debounce dahil edilir
import _ from "lodash";               // CommonJS: tüm kütüphane gelir

Neden çalışmaz?

  • Kütüphane CommonJS (require) ile yayınlanmışsa statik analiz yapılamaz.
  • Side effect'ler: Modülün en üst seviyesinde global'i değiştiren kod varsa bundler onu silmeye cesaret edemez. Kütüphaneler package.json'da "sideEffects": false (veya CSS dosyaları gibi bir liste) belirtmelidir.
  • import * as utils ve dinamik erişim (utils[name]) analizi bozar.
  • Barrel dosyaları (index.ts her şeyi re-export eder) bazı araçlarda gereksiz modülleri çekip build'i yavaşlatır.
  • Babel'in ESM'i CommonJS'e çevirmesi (modules: "commonjs").

Bundle içeriğini rollup-plugin-visualizer veya webpack-bundle-analyzer ile doğrulayın.

  1. Bundle boyutunu nasıl analiz eder ve küçültürsünüz?OrtaWeb PerformansıFrontend
  2. Çok uzun bir listeyi (on binlerce satır) performanslı nasıl gösterirsiniz?ZorWeb PerformansıFrontend
  3. Bir web sayfasının yükleme performansını nasıl iyileştirirsiniz?OrtaWeb PerformansıFrontend
  4. Core Web Vitals nedir? LCP, INP ve CLS neyi ölçer?OrtaWeb PerformansıFrontend
  5. preload, prefetch, preconnect ve dns-prefetch resource hint'leri arasındaki fark nedir?KolayWeb PerformansıFrontend
  6. INP değeriniz kötü. Yavaş etkileşimleri nasıl bulur ve düzeltirsiniz?ZorWeb PerformansıFrontend

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle