Микрофронтенды — это архитектурный подход, при котором фронтенд-приложение разбивается на отдельные, независимые модули, каждый из которых разрабатывается, тестируется и деплоится отдельно. Такой подход позволяет крупным командам работать параллельно, снижает риски и облегчает масштабирование фронтенда.
Независимость модулей Каждый микрофронтенд обладает собственной кодовой базой, состоянием и зависимостями. Это позволяет обновлять отдельные части приложения без затрагивания остальных.
Изоляция стилей и зависимостей Использование Preact в сочетании с модульными стилями и CSS-in-JS обеспечивает минимизацию конфликтов. Модули могут подключать собственные версии библиотек, не влияя на глобальное пространство.
Композиция через контейнер Основное приложение
или «контейнер» выступает как оболочка, которая подгружает
микрофронтенды и управляет их жизненным циклом. Preact позволяет
эффективно рендерить компоненты динамически, используя ленивую загрузку
через preact.lazy() и Suspense.
1. Использование модульных сборок Каждый микрофронтенд компилируется отдельно через сборщик (Vite, Webpack, Rollup) в формат ES-модулей. Контейнер динамически импортирует их:
import { h, render } from 'preact';
async function loadMicroFrontend(url, mountPoint) {
const { default: MicroApp } = await import(url);
render(<MicroApp />, document.querySelector(mountPoint));
}
2. Коммуникация между микрофронтендами Для обмена данными между модулями используется:
CustomEvent.3. Роутинг и маршрутизация Preact Router позволяет каждому микрофронтенду иметь свой локальный роутинг. Контейнер управляет только базовой маршрутизацией, а микрофронтенды отвечают за внутренние пути.
import { Router } from 'preact-router';
import Home from './Home';
import Dashboard from './Dashboard';
const App = () => (
<Router>
<Home path="/" />
<Dashboard path="/dashboard/*" />
</Router>
);
Проект микрофронтендов может выглядеть следующим образом:
/container
/src
index.js
App.js
/microfrontend-header
/src
Header.js
/microfrontend-dashboard
/src
Dashboard.js
Каждый микрофронтенд компилируется независимо, а контейнер загружает их через динамический импорт.
preact.lazy снижает время первой загрузки.Несмотря на независимость, микрофронтенды часто требуют синхронизации состояния:
useState, useReducer) для модульного
управления.Архитектура микрофронтендов с Preact сочетает лёгкость и высокую производительность с модульностью и независимостью разработки, делая её удобной для крупных проектов с распределёнными командами.