Webpack — apa itu, arsitektur dan prinsip kerja

Penulis: IT Sectr Diterbitkan: 2026-05-19 Waktu membaca: 8 mnt

Webpack — bundler sumber terbuka yang kuat yang telah menjadi standar de facto untuk membangun aplikasi JavaScript. Ia menerima modul dengan dependensi dan menghasilkan sumber daya statis yang dioptimalkan untuk browser atau lingkungan runtime lainnya. Menurut Webpack Documentation (2026), ekosistemnya memiliki lebih dari 15 ribu loader dan plugin untuk tugas build apa pun.

Utama

  • Webpack — bundler JavaScript yang membangun grafik dependensi dan menghasilkan file output yang dioptimalkan.
  • Entry — titik masuk di mana Webpack mulai membangun grafik dependensi aplikasi.
  • Loaders — transformasi yang memproses file berbagai jenis (TypeScript, SCSS, gambar) sebelum ditambahkan ke grafik.
  • Plugins — ekstensi yang melakukan tugas tambahan: minifikasi, injeksi HTML, pengelolaan variabel lingkungan.
  • Code Splitting — pemisahan bundel menjadi chunk yang dimuat sesuai permintaan untuk mempercepat pemuatan awal.

Apa itu Webpack?

Webpack — adalah bundler modul yang menganalisis dependensi aplikasi dan mengemasnya menjadi file statis untuk browser atau server. Dibuat oleh Tobias Koppers pada tahun 2012, Webpack dengan cepat menjadi standar build berkat konsep semua file adalah modul: JavaScript, CSS, gambar, font, dan bahkan HTML diproses melalui sistem loader terpadu.

Mengapa Webpack menjadi standar industri

Webpack mengusulkan ide yang revolusioner untuk zamannya: loader memungkinkan menghubungkan sumber daya apa pun melalui import atau require. Ini membebaskan pengembang dari kebutuhan menggunakan alat terpisah untuk preprosesor CSS (SCSS), kompiler TypeScript, dan pengoptimal gambar. Pada tahun 2020, lebih dari 80% proyek JavaScript menggunakan Webpack (data npm stat: 2019–2024).

Pesaing — Vite, Parcel dan Turbopack — menawarkan kecepatan pengembangan yang lebih tinggi, tetapi Webpack mempertahankan kepemimpinan di segmen enterprise berkat stabilitas, ekosistem yang matang, dan kompatibilitas mundur. Migrasi dari Webpack ke Vite di proyek besar memakan waktu berminggu-minggu dan sering terhambat oleh ketidakcocokan plugin.

Bagaimana Webpack bekerja

Webpack membangun grafik dependensi, dimulai dari titik masuk. Setiap import atau require yang ditemukan ditambahkan ke grafik, melewati rantai loader dan ditempatkan di chunk. Hasil akhir tergantung pada konfigurasi: satu bundel, beberapa chunk, atau output perpustakaan dalam format UMD, CommonJS atau ES Module.

Proses build Webpack

js
// Konfigurasi minimal 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 memperkenalkan cache bawaan berbasis sistem file, yang mempercepat build berulang 2–5 kali. Persistent caching menyimpan hasil transformasi modul antar proses, yang sangat penting dalam CI/CD. Untuk mengaktifkannya, cukup tambahkan cache: { type: 'filesystem' } ke konfigurasi.

Konsep kunci Webpack

Webpack beroperasi dengan empat konsep dasar: Entry (titik masuk), Output (keluaran), Loaders (transformasi) dan Plugins (ekstensi). Memahami konsep-konsep ini diperlukan untuk mengkonfigurasi build apa pun, dari situs sederhana hingga aplikasi enterprise yang kompleks.

Entry, Output dan mode

Entry — array atau objek yang mendefinisikan satu atau beberapa titik masuk. Multi-entry digunakan untuk aplikasi multi-komponen. Output — pengaturan file keluaran: path, template nama, URL publik. Modedevelopment, production atau none — secara otomatis mengaktifkan plugin optimal dan nilai default untuk setiap mode.

Content Hash — penambahan hash konten ke nama file ([contenthash]) memastikan caching jangka panjang. Browser memuat file baru hanya jika isinya berubah. SplitChunksPlugin secara otomatis mengekstrak dependensi bersama dari entry yang berbeda ke dalam chunk terpisah, mencegah duplikasi kode.

Loaders dan Plugins

Loaders mentransformasi file sumber sebelum ditambahkan ke grafik dependensi. Setiap loader adalah fungsi yang menerima konten file dan mengembalikan modul JavaScript. Plugins — ekstensi yang lebih kuat yang memiliki akses ke seluruh siklus hidup build: dari awal hingga pembuatan file output.

Loader populer dan tujuannya

LoaderTujuanContoh penggunaan
babel-loaderTranspilasi ES6+/JSX ke ES5Komponen React dengan JSX
ts-loaderKompilasi TypeScript ke JavaScriptProyek Angular, TypeScript
css-loaderPemrosesan @import dan url() di CSSModul CSS, PostCSS
sass-loaderTranspilasi SCSS/SASS ke CSSBootstrap, tema kustom
file-loaderMenyalin file ke outputGambar, font
svg-inline-loaderInline SVG dalam JavaScriptIkon, logo

Plugins, tidak seperti loader, dapat bertindak pada tahap build mana pun. HtmlWebpackPlugin secara otomatis menghasilkan file HTML dengan skrip yang terhubung. MiniCssExtractPlugin mengekstrak CSS ke file terpisah untuk pemuatan paralel. DefinePlugin memungkinkan meneruskan variabel lingkungan ke kode aplikasi selama build.

Optimasi build Webpack

Webpack menyediakan mekanisme optimasi bawaan: tree shaking, code splitting dan kompresi. Tree shaking menghapus ekspor yang tidak digunakan dari modul ES. Code splitting melalui import() membagi bundel menjadi chunk dinamis. MinimizerTerserPlugin untuk JS dan CssMinimizerPlugin untuk CSS.

Teknik optimasi lanjutan

js
// webpack.config.js — optimasi build produksi
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 — fitur Webpack 5 yang paling kuat untuk microfrontend. Ini memungkinkan memuat modul dari build independen lain saat runtime. Setiap mikro-aplikasi dikembangkan dan diterapkan secara independen, tetapi bergabung menjadi satu antarmuka untuk pengguna. Segment Analytics telah menggunakan Module Federation dalam produksi sejak 2021, mengurangi waktu penerapan sebesar 80%.

Webpack untuk React Native dan proyek web

Webpack jarang digunakan langsung di React Native — untuk itu ada Metro. Namun, Webpack digunakan dalam proyek React Native Web, ketika satu basis kode dibangun untuk platform seluler (melalui Metro) dan web (melalui Webpack). Webpack juga populer di aplikasi hibrida pada Ionic dan Cordova.

Webpack untuk build lintas platform

Dalam proyek di mana React Native Web digunakan untuk rendering web, Webpack dikonfigurasi dengan alias yang menggantikan modul asli dengan implementasi web. Alias react-nativereact-native-web memungkinkan penggunaan komponen bersama tanpa mengubah impor. DefinePlugin meneruskan bendera platform untuk kompilasi bersyarat kode spesifik platform.

Optimasi Webpack untuk web seluler berbeda dari desktop. Build Mobile-first mencakup minifikasi agresif, lazy loading gambar, dan pemuatan prioritas CSS kritis. CompressionPlugin dengan kompresi brotli mengurangi ukuran bundel sebesar 20–25% untuk jaringan seluler 3G/4G. Gunakan webpack-merge untuk memisahkan konfigurasi untuk platform berbeda: build mobile-first dan yang dioptimalkan untuk desktop.

Webpack 5 Module Federation: microfrontend

Module Federation — fitur revolusioner Webpack 5, yang memungkinkan memuat modul JavaScript dari build independen lain tanpa publikasi di npm. Setiap mikro-aplikasi dikembangkan secara independen, memiliki konfigurasi Webpack sendiri, dan diterapkan secara terpisah. Aplikasi Host menghubungkan modul dari build jarak jauh melalui konfigurasi khusus plugin ModuleFederationPlugin.

Penyedia exposes modul yang dipilih, dan host menggunakan remotes untuk menghubungkannya. Module Federation mendukung pustaka bersama: jika React digunakan di dua mikro-aplikasi, Webpack akan memuatnya hanya sekali. Ini memberikan penghematan lalu lintas hingga 60% bagi pengguna. Perusahaan besar, termasuk Segment dan Best Buy, menggunakan Module Federation dalam produksi, mengurangi waktu penerapan dari jam menjadi menit.

Masalah umum dan solusinya

Saat bekerja dengan Module Federation, pengembang sering menghadapi konflik dependensi shared dari versi yang berbeda. Solusinya — tentukan secara eksplisit requiredVersion dan singleton: true untuk pustaka kritis. Masalah lain — kehilangan konteks saat mengimpor komponen dari build jarak jauh, terutama dengan React Context dan Redux. Untuk mengatasinya, gunakan shared: { react: { singleton: true } } untuk memastikan semua mikro-aplikasi menggunakan instance React yang sama. Untuk arsitektur microfrontend besar, disarankan menggunakan Module Federation dengan sistem monorepo (Nx, Turborepo) untuk menyinkronkan versi dependensi bersama dan memastikan konsistensi build.

Pertanyaan yang sering diajukan

Apa perbedaan antara Webpack 5 dan Webpack 4?

Webpack 5 memperkenalkan persistent caching (percepatan build berulang hingga 5x), dukungan bawaan untuk Module Federation untuk microfrontend, dan output clean otomatis. Loader usang (raw-loader, url-loader) dan banyak polyfill Node.js telah dihapus, yang mengurangi ukuran konfigurasi rata-rata sebesar 30%.

Bagaimana cara mengurangi ukuran konfigurasi Webpack?

Gunakan webpack-cli init untuk menghasilkan konfigurasi dasar. Untuk proyek tipikal, terapkan create-react-app (CRA) atau Next.js, yang menyembunyikan konfigurasi Webpack. Jika diperlukan konfigurasi kustom — webpack-merge memungkinkan membagi konfigurasi menjadi modul yang dapat digunakan kembali untuk lingkungan yang berbeda.

Apa itu Webpack Dev Server?

Webpack Dev Server — server pengembangan bawaan dengan dukungan HMR (Hot Module Replacement). Ia memantau perubahan pada file dan memperbarui modul di browser tanpa memuat ulang halaman sepenuhnya. Untuk pengembangan seluler, server dev dapat dikonfigurasi untuk akses melalui jaringan lokal dengan menentukan host: '0.0.0.0' dan sertifikat HTTPS.

Bagaimana Webpack memproses gambar?

Webpack 5 menggunakan Asset Modules bawaan untuk memproses gambar: asset/resource menyalin file apa adanya, asset/inline menyematkannya sebagai base64 (untuk file di bawah 8KB), asset memilih secara otomatis berdasarkan ukuran. Untuk optimasi gambar, tambahkan image-webpack-loader dengan kompresi WebP dan optimasi lossless.

Apakah layak migrasi dari Webpack ke Vite?

Untuk proyek baru — ya, Vite memberikan peningkatan kecepatan yang signifikan. Untuk proyek enterprise yang ada dengan ratusan plugin Webpack — migrasi dapat memakan waktu 2–4 minggu. Nilai seberapa kritis kecepatan build dev: jika waktu build penuh melebihi 5 menit, migrasi dapat dibenarkan.

Kesimpulan

  • Webpack — bundler JavaScript universal dengan ekosistem loader dan plugin terbesar.
  • Entry, Output, Loaders dan Plugins — empat konsep dasar yang menentukan konfigurasi build apa pun.
  • Loaders mentransformasi file (TypeScript, SCSS, JSX) sebelum ditambahkan ke grafik dependensi.
  • Plugins memperluas fungsionalitas Webpack di semua tahap siklus hidup build.
  • Code Splitting dan Tree Shaking mengurangi ukuran bundel dengan menghapus kode yang tidak digunakan dan pemuatan lambat.
  • Module Federation — teknologi microfrontend yang memungkinkan memuat modul dari berbagai build saat runtime.
  • Untuk proyek baru pertimbangkan Vite, untuk solusi enterprise yang ada Webpack tetap menjadi pilihan yang stabil.

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga