Skip to main content

Що робить підхід "Micro-frontend" з React?

Що таке Micro-frontend

Micro-frontend - це архітектурний підхід, у якому фронтенд-застосунок ділиться на безліч маленьких, автономних частин - кожна з яких реалізує свою фічу, збирається і розгортається незалежно, а в браузері ці частини "збираються" в єдине ціле.

Аналогія:

Бекенд-світ: Microservices Фронтенд-світ: Micro-frontends


Головна ідея

Звичайний SPA з часом стає "монолітом":

  • складний, важко оновлювати;
  • кілька команд заважають одна одній;
  • один деплой ламає все.

Micro-frontend вирішує це тим, що:

  • Кожна команда володіє своїм фрагментом інтерфейсу (feature / domain);
  • Ці фрагменти інтегруються у спільну оболонку (Shell / Container App);
  • Кожен фрагмент можна деплоїти незалежно.

Структура Micro-frontend-системи

javascript
┌──────────────────────────┐ Shell / Host │ ← React-застосунок-контейнер │ ┌──────────────────────┐ │ │ │ Micro-app #1 │ │ ← незалежний React (або Vue, Svelte) │ ├──────────────────────┤ │ │ │ Micro-app #2 │ │ │ ├──────────────────────┤ │ │ │ Micro-app #3 │ │ │ └──────────────────────┘ │ └──────────────────────────┘

Кожен Micro-app може мати:

  • свій власний React і залежності,
  • окремий CI/CD pipeline,
  • власний репозиторій,
  • незалежний релізний цикл.

Як це працює в React

1. Host (контейнерний застосунок)

Головний React-застосунок, який:

  • рендерить "каркас" (layout, navbar, router),
  • динамічно довантажує мікрофронтенди,
  • пов'язує їх між собою (навігація, спільний контекст).

2. Remote (мікрозастосунки)

Кожен мікрозастосунок експортує свої компоненти (наприклад, сторінку або віджет).

3. Module Federation (Webpack 5)

Технічний механізм, який дозволяє одному застосунку завантажувати модулі з іншого прямо під час виконання.


Приклад: структура з Webpack Module Federation

javascript
/shell-app webpack.config.js src/App.jsx /profile-app webpack.config.js src/Profile.jsx /dashboard-app webpack.config.js src/Dashboard.jsx

Shell (host)

javascript
// shell/webpack.config.js new ModuleFederationPlugin({ name: 'shell', remotes: { profile: 'profileApp@http://localhost:3001/remoteEntry.js', dashboard: 'dashboardApp@http://localhost:3002/remoteEntry.js', }, });
javascript
// shell/src/App.jsx import Profile from "profile/Profile"; import Dashboard from "dashboard/Dashboard"; export default function App() { return ( <div> <h1>Головна оболонка</h1> <Profile /> <Dashboard /> </div> ); }

Тепер Profile і Dashboard - це окремі React-застосунки, що довантажуються за URL, але працюють в одному UI.


Переваги micro-frontend архітектури

ПеревагаОпис
Незалежна розробкаКоманди можуть працювати і релізити автономно
Різні технологіїМожна використовувати React, Vue, Svelte в різних зонах
Незалежний деплойОновлення одного мікрофронтенда не вимагає релізу всієї системи
Швидший CI/CDМаленькі збірки, окремі пайплайни
ІзоляціяПомилка в одному модулі не ламає весь UI
Спрощена масштабованістьКоманди можуть володіти своїми доменами (auth, billing, dashboard тощо)

Недоліки і складнощі

ПроблемаЩо потрібно враховувати
ІнтеграціяСпільні стилі, дизайн-система, роутинг, шини подій
Спільний stateСкладно ділити Redux/Zustand між мікрофронтендами
Розмір бандлаДублювання залежностей (React, libs) без оптимізації
Деплой-оркестраціяПотрібно керувати версіями і сумісністю модулів
Безпека та ізоляціяКонтролювати доступ, sandbox, CORS
PerformanceБагато окремих завантажень = більше запитів

Способи інтеграції micro-frontends

ПідхідЯк працюєПриклад
Module Federation (Webpack 5)Динамічне завантаження JS-модулів на клієнтіshell + remoteEntry.js
Single-SPAМета-фреймворк для реєстрації під-застосунківregisterApplication()
iframe-basedКожен мікрофронтенд в iframe (проста ізоляція, але слабка інтеграція)<iframe src="...">
Runtime Composition (Import Maps)Використання системних імпортів ES-модулівimportmap.json
Server-Side CompositionСервер "склеює" HTML-фрагментиEdge-composition, Tailor.js

Приклади в реальних проєктах

КомпаніяДе використовуєтьсяОсобливості
NetflixГоловна сторінка, "Rows" і "Player" - окремі мікрофронтендиШвидкі незалежні релізи
SpotifyРозділи Library, Search, PlayerРізні команди, спільний shell
AmazonProduct, Cart, ReviewsОкремі JS-бандли під кожен домен
GitHubPages і Settings - незалежні мікрофронтендиПерехід між командами без моноліту

Підсумок

ЩоОпис
ІдеяДілити фронтенд на незалежні, автономні модулі
СтруктураShell (Host) + Remotes (Micro-apps)
ІнтеграціяЧерез Module Federation / Single-SPA / iframes
ЦільМасштабованість, незалежність, гнучкість команд
ПлюсиІзоляція, швидкі релізи, різна технологія
МінусиСпільні стани, роутинг, версії, інтеграція

Головна думка: Micro-frontend - це спосіб будувати React-екосистему як набір незалежних мікросервісів, де кожна частина UI - окремий застосунок зі своїм життям, але користувачу це виглядає як єдине ціле.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.