Solusi Webpack Chunk Load Error: Mengatasi Blank Page pada Aplikasi

Penyebab Utama Chunk Load Error

Webpack Chunk Load Error terjadi ketika browser gagal memuat file JavaScript (chunk) yang dipecah (code splitting) saat aplikasi berjalan. Masalah ini biasanya muncul setelah Anda melakukan deployment versi baru, sementara pengguna masih membuka versi lama di browser mereka. Browser mencoba mengambil file chunk dengan hash lama yang sudah tidak ada di server karena telah digantikan oleh hash baru.

Tabel Analisis Penyebab

PenyebabDeskripsi Teknis
Deployment BaruFile chunk lama dihapus dari server, namun browser masih meminta hash lama.
Caching AgresifService worker atau CDN menyimpan file index.html lama yang merujuk ke chunk usang.
Network InterruptionKoneksi pengguna terputus saat mengunduh file chunk yang besar.
Path SalahKonfigurasi publicPath di Webpack tidak sesuai dengan struktur server.

Strategi Perbaikan Teknis

Untuk mengatasi masalah ini secara permanen, Anda perlu mengimplementasikan mekanisme retry pada proses pemuatan chunk dan mengatur kebijakan caching yang tepat.

1. Implementasi Retry Logic pada Webpack

Anda dapat menambahkan logika untuk mencoba memuat ulang chunk jika terjadi kegagalan jaringan. Tambahkan kode berikut pada konfigurasi Webpack atau di dalam file entry point aplikasi Anda:

// Contoh implementasi retry pada dynamic import
function loadWithRetry(importFn, retries = 3, interval = 1000) {
  return importFn().catch(error => {
    if (retries <= 0) throw error;
    return new Promise(resolve => setTimeout(resolve, interval))
      .then(() => loadWithRetry(importFn, retries - 1, interval));
  });
}

// Penggunaan:
loadWithRetry(() => import('./MyComponent'));

2. Pengaturan Cache-Control

Pastikan file index.html tidak di-cache oleh browser atau CDN. Gunakan header berikut pada server Anda:

Cache-Control: no-cache, no-store, must-revalidate

File chunk lainnya (yang memiliki hash di namanya) dapat di-cache dalam jangka panjang (misalnya 1 tahun) karena jika konten berubah, hash-nya pun akan berubah, sehingga browser akan mengunduh file baru secara otomatis.

Langkah Troubleshooting Lapangan

  1. Bersihkan Cache CDN: Jika Anda menggunakan Cloudflare atau CloudFront, lakukan purge cache setelah setiap deployment.
  2. Verifikasi publicPath: Pastikan output.publicPath di webpack.config.js mengarah ke URL yang benar (misalnya / atau URL CDN absolut).
  3. Gunakan Error Boundary: Dalam framework seperti React, gunakan componentDidCatch untuk menangkap error pemuatan chunk dan memicu window.location.reload() agar pengguna mendapatkan versi aplikasi terbaru.
  4. Cek Integritas File: Pastikan proses build tidak menghapus file chunk yang sedang digunakan oleh sesi pengguna yang aktif sebelum deployment selesai sepenuhnya.