3 Langkah Mudah Membangun Micro Frontends Di React
Pernahkah Anda bertanya-tanya bagaimana situs web besar seperti Amazon atau Netflix dapat memberikan pengalaman pengguna yang lancar di banyak halaman? Jawabannya terletak pada penggunaan arsitektur mikrofrontend mereka.
Microfrontend adalah pendekatan untuk membangun aplikasi di mana front-end dipecah menjadi bagian yang lebih kecil dan independen, masing-masing dengan antarmuka pengguna dan fungsinya sendiri. Bagian-bagian independen ini kemudian diintegrasikan untuk membentuk sebuah aplikasi yang lengkap.
Keuntungan dari microfrontend adalah membuat aplikasi lebih fleksibel dan lebih mudah untuk dipelihara. Daripada memiliki satu ujung depan monolitik, Anda dapat memecahnya menjadi komponen yang lebih kecil dan dapat digunakan kembali. Hal ini memungkinkan developer untuk bekerja pada bagian aplikasi yang berbeda tanpa mengganggu bagian lain. Ini juga berarti bahwa jika salah satu bagian dari aplikasi perlu diperbarui, hal itu dapat dilakukan tanpa mempengaruhi bagian aplikasi lainnya.
Catatan: Mengelola komponen dan ketergantungannya di dalam Microfrontends dapat menjadi tantangan tersendiri. Di sinilah Bit berguna. Bit adalah alat open-source untuk berbagi dan mengelola komponen yang dapat digunakan kembali di berbagai proyek dan tim. Dengan Bit, Anda dapat dengan mudah membuat, berbagi, dan menggunakan kembali komponen, sehingga memudahkan pemeliharaan dan pembaruan arsitektur mikrofrontend Anda. Pelajari lebih lanjut di sini.
Mari kita mulai dan bangun microfrontend pertama kita di React dalam 3 langkah sederhana.
1. Atur Proyek React Microfrontend
Kita akan menggunakan federasi modul webpack dengan React untuk membangun mikrofrontend pertama kita.
- Buat direktori proyek microfrontend Anda. Sebut saja: mikro-host.
- Jalankan perintah di bawah ini untuk memulai proyek dan pasang semua dependensi:
npm init -y
npm install react react-dom --save
npm install @babel/core @babel/preset-env @babel/preset-react babel-loader css-loader html-webpack-plugin sass sass-loader style-loader webpack webpack-cli webpack-dev-server --save-dev
-
Buka file
package.json
dan salin tempel di bawah skrip npm:
"scripts": {
"build": "webpack",
"start": "webpack serve --watch-files ./src"
}
-
Buat file
babel.config.json
dan tempelkan di bawah konfigurasi:
{
"presets": [
"@babel/preset-env",
"@babel/preset-react"
]
}
-
Buat file
webpack.config.js
dan tempelkan di bawah konfigurasi:
const HtmlWebpackPlugin = require("html-webpack-plugin");
const path = require("path");
const ModuleFederationPlugin = require("webpack/lib/container/ModuleFederationPlugin");
const deps = require("./package.json").dependencies;
module.exports = {
mode: "development",
resolve: {
extensions: [".css", ".scss", ".js", ".jsx"],
},
module: {
rules: [
{
test: /\.s?css$/,
use: [
"style-loader",
{
loader: "css-loader",
options: {
url: {
filter: (url) => {
if (url.startsWith("data:")) {
return false;
}
return true;
},
},
},
},
"sass-loader",
],
},
{
test: /\.jsx?$/,
use: ["babel-loader"],
exclude: /node_modules/,
},
{
test: /\.(png|svg|jpg|jpeg|gif)$/i,
type: "asset/resource",
},
],
},
plugins: [
new HtmlWebpackPlugin({
template: path.resolve(__dirname, "public", "index.html"),
}),
new ModuleFederationPlugin({
name: "FIRST_APP",
filename: "remoteEntry.js",
exposes: {
"./app": "./src/components/App",
},
}),
],
};
Dalam konfigurasi di atas, kami menamai mikrofrontend FIRST_APP.
Kami mengekspos komponen Aplikasi kami yang dapat diintegrasikan secara langsung menggunakan URL long distancenya.
-
Buat direktori
public
dan buat filepublic/index.html
dan tempelkan kode di bawah ini:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Micro App</title>
</head>
<body>
<div id="container"></div>
</body>
</html>
File ini membuat struktur untuk aplikasi web React kita. Aplikasi akan dirender di dalam div “container” saat Anda mengunjungi aplikasi secara normal seperti yang Anda lakukan pada aplikasi React lainnya.
-
Buat direktori
src
dan buat filesrc/index.js
dan tempelkan kode di bawah ini:
import React from 'react';
import { StrictMode } from "react";
import { createRoot } from "react-dom/client";
import MainApp from './components/Main';
const rootElement = document.getElementById("container");
const root = createRoot(rootElement);
root.render(
<StrictMode>
<MainApp />
</StrictMode>
);
Kami menggunakan React 18 di sini dan komponen MainApp
dibuat untuk menggunakan aplikasi langsung di browser web.
-
Buat direktori
src/components
dan buat fileApp.js
dan tempelkan kode di bawah ini:
import * as React from 'react';
import "./styles.css";
export default function App({ onChange }) {
return (
<div className="MicroApp">
<h1>Micro App</h1>
<input onChange={onChange} type="text" placeholder="Enter your name" />
</div>
);
}
App
komponen di atas adalah microfrontend utama yang akan kami paparkan dalam proyek kami. Anda juga dapat membuat lebih banyak komponen dan mengeksposnya menggunakan webpack.config.js.
-
Buat file
src/components/Main.js
dan tempelkan kode di bawah ini:
import * as React from 'react';
import App from './App';
import "./styles.css";
export default function MainApp() {
const [name, setName] = React.useState(null);
return (
<>
<h3 style={{ textAlign: 'center' }}>{ name ? <p>Your name is: {name}</p> : null }</h3>
<App onChange={(e) => setName(e.target.value)} />
</>
);
}
Komponen MainApp
hanya digunakan untuk satu tujuan, yaitu untuk mengizinkan penggunaan aplikasi seperti aplikasi React lainnya.
-
Buat file
src/components/styles.css
dan tempelkan kode di bawah ini:
.MicroApp {
box-sizing: border-box;
margin: auto;
margin-top: 100px;
padding: 30px;
width: 95%;
border: 2px solid black;
border-radius: 12px;
font-family: sans-serif;
text-align: center;
}
.MicroApp input {
height: 32px;
border-radius: 8px;
border: 2px solid gray;
width: 350px;
padding-left: 10px;
padding-right: 10px;
}
2. Boot Aplikasi MicroFrontend Pertama Anda
Untuk memulai server aplikasi mikrofrontend Anda, jalankan perintah di bawah ini:
npm start
3. Mengintegrasikan MicroFrontend di React
Mengintegrasikan aplikasi mikrofrontend di React lain sangatlah sederhana. Aplikasi microfrontend akan dihosting di port 8080
dan aplikasi kedua kami akan mengintegrasikannya melalui URL long distance yang diekspos melalui package web.
-
Buat direktori proyek Anda. Sebut saja:
klien mikro.
- Jalankan perintah di bawah ini untuk memulai proyek dan instal semua dependensi:
npm init -y
npm install react react-dom --save
npm install @babel/core @babel/preset-env @babel/preset-react babel-loader css-loader html-webpack-plugin sass sass-loader style-loader webpack webpack-cli webpack-dev-server --save-dev
-
Buka file
package.json
dan salin tempel di bawah skrip npm:
"scripts": {
"build": "webpack",
"start": "webpack serve --watch-files ./src"
}
-
Buat file
babel.config.json
dan tempelkan di bawah konfigurasi:
{
"presets": [
"@babel/preset-env",
"@babel/preset-react"
]
}
-
Buat file
webpack.config.js
dan tempelkan di bawah konfigurasi:
const HtmlWebpackPlugin = require("html-webpack-plugin");
const path = require("path");
const ModuleFederationPlugin = require("webpack/lib/container/ModuleFederationPlugin");
const deps = require("./package.json").dependencies;
module.exports = {
mode: "development",
resolve: {
extensions: [".css", ".scss", ".js", ".jsx"],
},
module: {
rules: [
{
test: /\.s?css$/,
use: [
"style-loader",
{
loader: "css-loader",
options: {
url: {
filter: (url) => {
if (url.startsWith("data:")) {
return false;
}
return true;
},
},
},
},
"sass-loader",
],
},
{
test: /\.jsx?$/,
use: ["babel-loader"],
exclude: /node_modules/,
},
],
},
plugins: [
new HtmlWebpackPlugin({
template: path.resolve(__dirname, "public", "index.html"),
}),
new ModuleFederationPlugin({
name: "MICRO",
remotes: {
FIRST_APP: "FIRST_APP@http://localhost:8080/remoteEntry.js",
},
}),
],
};
Dalam konfigurasi di atas, kami memulai long distance aplikasi mikrofrontend FIRST_APP.
-
Buat direktori
public
dan buat filepublic/index.html
dan tempelkan kode di bawah ini:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Micro App</title>
</head>
<body style="width: 100%; height: 100%">
<div id="container"></div>
</body>
</html>
-
Buat direktori
src
dan buat filesrc/index.js
dan tempelkan kode di bawah ini:
import React from 'react';
import { StrictMode } from "react";
import { createRoot } from "react-dom/client";
import App from "./App";
const rootElement = document.getElementById("container");
const root = createRoot(rootElement);
root.render(
<StrictMode>
<App />
</StrictMode>
);
-
Buat direktori
src
dan buat filesrc/index.js
dan tempelkan kode di bawah ini:
import React, { lazy, Suspense } from "react";
import "./styles.css";
const FirstApp = lazy(() => import("FIRST_APP/app"));
const App = () => {
const [name, setName] = React.useState(null);
return (
<div className="App">
<h1>This is second app</h1>
<h2>Micro host app is integrated here</h2>
{ name ? <p>Your name is: {name}</p> : null }
<div>
<Suspense fallback={<span>Loading...</span>}>
<FirstApp onChange={(e) => setName(e.target.value)} />
</Suspense>
</div>
</div>
);
};
export default App;
Kami menggunakan Suspense
untuk memuat aplikasi remote microfrontend kami di aplikasi React ini.
-
Buat file
src/components/styles.css
dan tempelkan kode di bawah ini:
.App {
font-family: sans-serif;
text-align: center;
}
Jalankan perintah di bawah ini untuk memulai aplikasi kedua:
npm start
Aplikasi akan mulai di port 8081.
Kunjungi http://localhost:8081/ untuk membuka dan memeriksa aplikasi.
Aplikasi mikrofrontend dimuat menggunakan URL long distance di aplikasi React kedua kami.
Kode untuk tutorial ini dapat ditemukan di sini.
Kesimpulan
Kesimpulannya, membangun aplikasi yang dapat digunakan kembali dan bertahan lama sampai jangka panjang sangat penting untuk bisnis atau organisasi mana pun yang ingin tetap berada di depan kurva. Menggunakan microfrontends dengan React dan Webpack Module Federation adalah cara yang bagus untuk mencapai tujuan ini.
Dengan membagi front-end menjadi komponen yang lebih kecil dan independen, Anda dapat membuat aplikasi yang lebih fleksibel dan modular. Hal ini memudahkan pemeliharaan dan pembaruan aplikasi, serta mengurangi jumlah kode duplikat yang perlu Anda tulis.
Bangun Aplikasi dengan komponen yang dapat digunakan kembali, seperti Lego
Artikel Terkait Lainnya :
- Wajib Tau Buat Kamu Yang Ingin Belajar Tipe Data Di Dalam Ilmu Statistik
- Simak Dulu Sebelum Memulai Karir Menjadi Seorang Copywriter
- Cara Deploy Aplikasi Di Digital Ocean
- Intip Gaji Software Engineer Di Beberapa Startup Terkenal Di Indonesia
- Ini Dia Bedanya Cloud Hosting Dengan Virtual Private Server