\n\n\n
\n
\n
\n\n\n```\n\n### Коммуникация между MFE\n\n**Event-based коммуникация**\n\n```javascript\n// Header MFE\nfunction handleUserLogin(user) {\n window.dispatchEvent(new CustomEvent('user-logged-in', {\n detail: { user }\n }));\n}\n\n// Cart MFE\nwindow.addEventListener('user-logged-in', (event) => {\n const user = event.detail.user;\n updateCart(user.id);\n});\n```\n\n**Shared State (Event Bus)**\n\n```javascript\n// shared-store.js\nclass EventBus {\n constructor() {\n this.events = {};\n }\n\n on(event, callback) {\n if (!this.events[event]) {\n this.events[event] = [];\n }\n this.events[event].push(callback);\n }\n\n emit(event, data) {\n if (this.events[event]) {\n this.events[event].forEach(callback => callback(data));\n }\n }\n}\n\nexport const bus = new EventBus();\n```\n\n```javascript\n// В Header MFE\nimport { bus } from './shared-store';\n\nbus.emit('user-logged-in', { userId: 123 });\n\n// В Cart MFE\nimport { bus } from './shared-store';\n\nbus.on('user-logged-in', (data) => {\n console.log('User logged in:', data);\n});\n```\n\n### Плюсы микрофронтендов\n\n- **Независимость** — разные команды работают на разных MFE\n- **Масштабируемость** — каждый MFE можно масштабировать отдельно\n- **Технологическая гибкость** — разные фреймворки (React, Vue, Svelte)\n- **Развёртывание** — обновлять можно отдельные модули\n- **Производительность** — ленивая загрузка MFE при необходимости\n\n### Минусы микрофронтендов\n\n- **Сложность** — архитектура сложнее, чем монолит\n- **Размер бандла** — если не правильно настроить shared зависимости\n- **Коммуникация** — need to manage communication between modules\n- **Debugging** — сложнее искать ошибки\n- **Потребление памяти** — каждый MFE может загружать свои зависимости\n\n### Когда использовать?\n\n✅ **Хорошо подходит для:**\n- Больших приложений с независимыми командами\n- Когда разные части приложения используют разные стеки\n- Проектов, где нужны независимые развёртывания\n\n❌ **Не подходит для:**\n- Маленьких приложений\n- Когда команда одна\n- Когда нужна быстрая разработка без усложнения архитектуры\n\n### Примеры в production\n\n- **Webpack Module Federation** — используется в крупных компаниях (Airbnb, Shopify)\n- **Single-spa** — фреймворк для микрофронтендов на Single Page Application\n- **Bit** — платформа для разработки и обмена компонентами между проектами\n\n### Заключение\n\nМикрофронтенды — это **архитектурный паттерн** для разработки больших, масштабируемых приложений. Module Federation в Webpack 5 — это современный стандарт, который значительно упрощает реализацию. Однако, это сложный подход, который имеет смысл только для больших проектов с независимыми командами разработки.","dateCreated":"2026-04-02T22:20:22.768063","upvoteCount":0,"author":{"@type":"Person","name":"claude-haiku-4.5"}}}}
← Назад к вопросам

Изучал ли микрофронтенд

1.3 Junior🔥 121 комментариев
#Архитектура и паттерны

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Микрофронтенды (Micro-Frontends)

Микрофронтенды (MFE) — это архитектурный подход, при котором фронтенд-приложение разбивается на несколько независимых, слабо связанных модулей. Это аналог микросервисов, но для фронтенда.

Основная идея

Инстеад одного монолитного приложения, мы создаём несколько небольших приложений, которые:

  • Разрабатываются независимо
  • Развёртываются отдельно
  • Используют свои технологии
  • Интегрируются в runtime
Монолит:
┌─────────────────────────┐
│   Фронтенд приложение   │
│   (React, Vue, Angular) │
│   Один репозиторий      │
└─────────────────────────┘

Микрофронтенды:
┌──────────────┐  ┌──────────────┐  ┌──────────────┐
│  Header MFE  │  │  Products    │  │  Cart MFE    │
│  (React)     │  │  MFE (Vue)   │  │  (Svelte)    │
└──────────────┘  └──────────────┘  └──────────────┘
        ↓               ↓                    ↓
    ┌─────────────────────────────────────┐
    │   Контейнерное приложение           │
    │   (Main Shell/Host)                 │
    └─────────────────────────────────────┘

Подходы реализации

1. Module Federation (Webpack 5+)

Современный стандарт для микрофронтендов:

// webpack.config.js в Host приложении
const ModuleFederationPlugin = require('webpack/lib/container/ModuleFederationPlugin');

module.exports = {
  plugins: [
    new ModuleFederationPlugin({
      name: 'host',
      remotes: {
        header: 'header@http://localhost:3001/remoteEntry.js',
        products: 'products@http://localhost:3002/remoteEntry.js',
        cart: 'cart@http://localhost:3003/remoteEntry.js'
      },
      shared: ['react', 'react-dom'] // Общие зависимости
    })
  ]
};
// webpack.config.js в Header MFE
module.exports = {
  plugins: [
    new ModuleFederationPlugin({
      name: 'header',
      filename: 'remoteEntry.js',
      exposes: {
        './Header': './src/Header'
      },
      shared: ['react', 'react-dom']
    })
  ]
};
// Использование в Host приложении
import Header from 'header/Header';
import Products from 'products/Products';
import Cart from 'cart/Cart';

export function App() {
  return (
    <>
      <Header />
      <Products />
      <Cart />
    </>
  );
}

2. iFrame (Изоляция)

Каждый микрофронтенд в отдельном iframe:

<div id="app">
  <iframe src="http://localhost:3001"></iframe>
  <iframe src="http://localhost:3002"></iframe>
</div>

Плюсы: полная изоляция, не конфликтуют стили/JS Минусы: сложность коммуникации, производительность

3. Web Components

Используем Custom Elements для интеграции:

// Header MFE как Web Component
class HeaderElement extends HTMLElement {
  connectedCallback() {
    this.innerHTML = `<header>My Header</header>`;
  }
}

customElements.define('app-header', HeaderElement);
<!-- Использование -->
<app-header></app-header>
<app-products></app-products>
<app-cart></app-cart>

4. Динамический импорт скриптов

Загружаем MFE как отдельные скрипты:

<script src="http://localhost:3001/bundle.js"></script>
<script src="http://localhost:3002/bundle.js"></script>

<div id="header-root"></div>
<div id="products-root"></div>
<div id="cart-root"></div>

<script>
  // Каждый MFE монтирует себя в свой root
  window.HeaderMFE.render(document.getElementById('header-root'));
  window.ProductsMFE.render(document.getElementById('products-root'));
</script>

Коммуникация между MFE

Event-based коммуникация

// Header MFE
function handleUserLogin(user) {
  window.dispatchEvent(new CustomEvent('user-logged-in', {
    detail: { user }
  }));
}

// Cart MFE
window.addEventListener('user-logged-in', (event) => {
  const user = event.detail.user;
  updateCart(user.id);
});

Shared State (Event Bus)

// shared-store.js
class EventBus {
  constructor() {
    this.events = {};
  }

  on(event, callback) {
    if (!this.events[event]) {
      this.events[event] = [];
    }
    this.events[event].push(callback);
  }

  emit(event, data) {
    if (this.events[event]) {
      this.events[event].forEach(callback => callback(data));
    }
  }
}

export const bus = new EventBus();
// В Header MFE
import { bus } from './shared-store';

bus.emit('user-logged-in', { userId: 123 });

// В Cart MFE
import { bus } from './shared-store';

bus.on('user-logged-in', (data) => {
  console.log('User logged in:', data);
});

Плюсы микрофронтендов

  • Независимость — разные команды работают на разных MFE
  • Масштабируемость — каждый MFE можно масштабировать отдельно
  • Технологическая гибкость — разные фреймворки (React, Vue, Svelte)
  • Развёртывание — обновлять можно отдельные модули
  • Производительность — ленивая загрузка MFE при необходимости

Минусы микрофронтендов

  • Сложность — архитектура сложнее, чем монолит
  • Размер бандла — если не правильно настроить shared зависимости
  • Коммуникация — need to manage communication between modules
  • Debugging — сложнее искать ошибки
  • Потребление памяти — каждый MFE может загружать свои зависимости

Когда использовать?

Хорошо подходит для:

  • Больших приложений с независимыми командами
  • Когда разные части приложения используют разные стеки
  • Проектов, где нужны независимые развёртывания

Не подходит для:

  • Маленьких приложений
  • Когда команда одна
  • Когда нужна быстрая разработка без усложнения архитектуры

Примеры в production

  • Webpack Module Federation — используется в крупных компаниях (Airbnb, Shopify)
  • Single-spa — фреймворк для микрофронтендов на Single Page Application
  • Bit — платформа для разработки и обмена компонентами между проектами

Заключение

Микрофронтенды — это архитектурный паттерн для разработки больших, масштабируемых приложений. Module Federation в Webpack 5 — это современный стандарт, который значительно упрощает реализацию. Однако, это сложный подход, который имеет смысл только для больших проектов с независимыми командами разработки.