Module Federation dengan Webpack 5
Konfigurasikan aplikasi host dan remote dengan Webpack Module Federation untuk berbagi komponen saat runtime.
Module Federation dengan Webpack 5 adalah pelajaran React Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar React Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus React Academy mencakup 4 pelajaran total.
Gambaran Umum Module Federation
Module Federation pada Webpack 5 memungkinkan Anda berbagi modul JavaScript antara aplikasi yang dibundel secara terpisah saat berjalan — satu aplikasi mengekspos komponen, sementara aplikasi lain menggunakannya tanpa tahap pembangunan.
Peran: Induk vs Jarak Jauh
Modul jarak jauh mengekspos modul. Aplikasi induk menggunakan modul dari satu atau beberapa modul jarak jauh. Sebuah aplikasi dapat menjadi induk sekaligus modul jarak jauh secara bersamaan.
Konfigurasi Modul Jarak Jauh
Dalam webpack.config.js aplikasi jarak jauh, gunakan ModuleFederationPlugin untuk mengekspos komponen.
// Remote: apps/products/webpack.config.js
const { ModuleFederationPlugin } = require('webpack').container;
module.exports = {
plugins: [
new ModuleFederationPlugin({
name: 'products', // remote name
filename: 'remoteEntry.js', // entry file
exposes: {
'./ProductCard': './src/components/ProductCard', // exposed module
'./CartButton': './src/components/CartButton',
},
shared: ['react', 'react-dom'], // share deps to avoid duplication
}),
],
};Konfigurasi Aplikasi Induk
Dalam konfigurasi webpack aplikasi induk, nyatakan modul jarak jauh mana yang akan digunakan dan dari mana modul tersebut akan dimuat.
// Host: apps/shell/webpack.config.js
new ModuleFederationPlugin({
name: 'shell',
remotes: {
products: 'products@http://localhost:3001/remoteEntry.js',
cart: 'cart@http://localhost:3002/remoteEntry.js',
},
shared: ['react', 'react-dom'],
})Menggunakan Modul Jarak Jauh
Impor modul jarak jauh menggunakan nama modul jarak jauh sebagai awalan jalur. Bungkus modul tersebut dalam React.lazy dan Suspense untuk pemuatan tertunda.
import React, { lazy, Suspense } from 'react';
const ProductCard = lazy(() => import('products/ProductCard'));
function App() {
return (
<Suspense fallback={<div>Loading...</div>}>
<ProductCard productId="123" />
</Suspense>
);
}Berbagi Dependensi
Daftarkan paket bersama dengan singleton: true agar hanya satu salinan React yang dimuat di seluruh mikro-frontend.
shared: {
react: { singleton: true, requiredVersion: '^18.0.0' },
'react-dom': { singleton: true, requiredVersion: '^18.0.0' },
'@company/design-system': { singleton: true },
},Modul Jarak Jauh Dinamis
Muat modul jarak jauh secara dinamis saat berjalan dari konfigurasi (misalnya, titik akhir manifes), bukan dengan menulis URL secara langsung di konfigurasi webpack.
async function loadRemote(scope, module) {
await __webpack_init_sharing__('default');
const container = window[scope];
await container.init(__webpack_share_scopes__.default);
const factory = await container.get(module);
return factory();
}
const ProductCard = React.lazy(() => loadRemote('products', './ProductCard'));TypeScript dengan Module Federation
Gunakan plugin @module-federation/typescript untuk membuat deklarasi tipe bagi modul yang diekspos agar aplikasi induk mendapatkan pelengkapan otomatis penuh.
Batas Kesalahan untuk Kegagalan Modul Jarak Jauh
Bungkus komponen jarak jauh dalam batas kesalahan. Jika modul jarak jauh gagal dimuat, aplikasi induk akan tetap berfungsi dengan baik, bukan mengalami kerusakan.
<ErrorBoundary fallback={<div>Product unavailable</div>}>
<Suspense fallback={<Skeleton />}>
<ProductCard productId={id} />
</Suspense>
</ErrorBoundary>Vite Module Federation
Plugin @originjs/vite-plugin-federation menghadirkan Module Federation ke proyek berbasis Vite dengan API yang serupa.
// vite.config.ts (remote)
import federation from '@originjs/vite-plugin-federation';
export default defineConfig({
plugins: [
federation({
name: 'products',
filename: 'remoteEntry.js',
exposes: { './ProductCard': './src/ProductCard' },
shared: ['react'],
}),
],
});Pemeriksaan Singkat
Apa dampak menetapkan paket bersama sebagai satu instans di Module Federation?
Ringkasan
Module Federation menggunakan ModuleFederationPlugin pada modul jarak jauh (untuk mengekspos) dan aplikasi induk (untuk menggunakan). Impor modul jarak jauh dengan lazy(), bagikan react sebagai satu instans untuk menghindari duplikasi, dan bungkus modul jarak jauh dalam batas kesalahan agar penurunan fungsi berlangsung dengan baik.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Module Federation dengan Webpack 5” gratis?
Ya — teks lengkap “Module Federation dengan Webpack 5” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus React Academy, upgrade ke CoddyKit PRO. Kursus React Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Module Federation dengan Webpack 5”?
Konfigurasikan aplikasi host dan remote dengan Webpack Module Federation untuk berbagi komponen saat runtime. Kamu berlatih React Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai React Academy?
Tidak diperlukan pengalaman sebelumnya. React Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Module Federation dengan Webpack 5” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran React Academy ini?
Ya. Setiap pelajaran React Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Konsep Micro-Frontend & Pertimbangannya
- Module Federation dengan Webpack 5
- Status Bersama & Perutean Antar-MFE
- Penerapan Mandiri & Pipeline CI untuk MFE