← Назад к вопросам

Какой плагин отвечает за настройку Micro Frontend?

2.2 Middle🔥 81 комментариев
#Soft Skills и рабочие процессы

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

🐱
deepseek-v3.2PrepBro AI4 апр. 2026 г.(ред.)

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

Отличный вопрос, который касается ключевой инфраструктуры современного веб-разработки. Важно сразу уточнить: не существует единого «плагина» для настройки Micro Frontend (MFE), так как это не библиотека, а архитектурный подход. Настройка осуществляется с помощью специальных инструментов и библиотек, которые реализуют механизмы интеграции независимых приложений.

Правильнее говорить о конкретных технологиях или сборщиках модулей (Module Federation), которые берут на себя роль «плагина» или «движка» для сборки MFE.

Module Federation: Core Concept

Ключевой технологией, которая произвела революцию в реализации MFE, является Module Federation, впервые представленный в Webpack 5. Это не просто плагин, а архитектурная особенность самого сборщика, позволяющая загружать код одного приложения из другого во время выполнения (runtime).

  • Webpack предоставляет ModuleFederationPlugin.
  • Vite предлагает аналогичную функциональность через плагин @originjs/vite-plugin-federation (сообщество) или встроенные экспериментальные возможности.
  • Rollup использует плагин @module-federation/rollup.

Эти инструменты и есть те самые «плагины», которые отвечают за настройку центральных аспектов MFE: объявление общих зависимостей, предоставление своих модулей и получение модулей из удаленных источников.

Ключевые «Плагины» и их роль

1. Webpack ModuleFederationPlugin

Это де-факто стандарт. Плагин настраивается в webpack.config.js как хоста (контейнера), так и remote (удаленного приложения).

// webpack.config.js удаленного приложения (Remote)
const { ModuleFederationPlugin } = require('webpack').container;

module.exports = {
  plugins: [
    new ModuleFederationPlugin({
      name: 'remote_app', // Уникальное имя
      filename: 'remoteEntry.js', // Файл-манифест для загрузки
      exposes: { // Модули, которые мы "предоставляем" наружу
        './Button': './src/components/Button',
        './App': './src/App',
      },
      shared: { // Общие зависимости
        react: { singleton: true, eager: true },
        'react-dom': { singleton: true, eager: true },
      },
    }),
  ],
};
// webpack.config.js хоста (Host/Container)
new ModuleFederationPlugin({
  name: 'host',
  remotes: { // Подключаем удаленные приложения
    remote_app: 'remote_app@http://localhost:3001/remoteEntry.js',
  },
  shared: {
    react: { singleton: true, eager: true },
    'react-dom': { singleton: true, eager: true },
  },
});

Роль: Плагин генерирует remoteEntry.js — специальный файл-манифест, содержащий информацию о предоставляемых модулях и их зависимостях. Хост загружает этот файл и динамически подключает нужные модули в runtime.

2. Single-SPA: Мета-фреймворк

Это не плагин, а полноценный фреймворк-оркестратор. Он предоставляет single-spa — библиотеку для жизненного цикла приложений и набор плагинов/утилит для разных фреймворков (single-spa-react, single-spa-vue и т.д.).

Роль: Single-SPA действует как роутер на уровне приложений. Он не занимается сборкой, но диктует, когда и какое микро-приложение должно быть загружено и смонтировано в DOM. Это более «ручной» и фреймворк-агностичный подход по сравнению с Module Federation.

// Конфигурация root приложения (single-spa)
import { registerApplication, start } from 'single-spa';

registerApplication({
  name: 'app1',
  app: () => import('app1/webpack.config.js'),
  activeWhen: ['/app1'],
});

start();

3. Vite Plugin Federation (@originjs/vite-plugin-federation)

Аналог для экосистемы Vite, который привносит те же возможности Module Federation в сверхбыстрый dev-сервер и сборщик.

// vite.config.js удаленного приложения
import { defineConfig } from 'vite';
import federation from '@originjs/vite-plugin-federation';

export default defineConfig({
  plugins: [
    federation({
      name: 'remote-app',
      filename: 'remoteEntry.js',
      exposes: {
        './Button': './src/components/Button.vue',
      },
      shared: ['vue'],
    }),
  ],
});

Роль: Позволяет использовать преимущества Vite (мгновенная пересборка, ES-модули) в архитектуре MFE.

Что именно настраивают эти плагины?

Плагины для MFE конфигурируют несколько критически важных аспектов:

  • Exposes / Remotes: Определяет, какие модули предоставляет приложение и откуда их можно загрузить.
  • Shared Dependencies (Общие зависимости): Самый сложный и важный пункт. Настройка гарантирует, что React, Vue или другие библиотеки загрузятся единожды и будут использоваться всеми микро-приложениями. Это предотвращает конфликты версий и дублирование кода.
    *   `singleton: true` — гарантирует одну версию в runtime.
    *   `eager: true` — загружает зависимость сразу, а не лениво.
  • Scope Hoisting и изоляция: Плагины организуют изоляцию кода и стилей, хотя полная CSS-изоляция часто требует дополнительных решений (Shadow DOM, CSS Modules, BEM).

Вывод

На вопрос «какой плагин отвечает за настройку Micro Frontend» наиболее точным ответом будет: ModuleFederationPlugin в Webpack 5 (или его аналоги для других сборщиков), так как он реализует ключевую техническую возможность — федерацию модулей на уровне инструмента сборки. Однако важно понимать, что успешная настройка MFE — это не только подключение плагина. Это комплексный процесс, включающий:

  1. Архитектурное решение (выбор между Module Federation, single-spa, iframe, или иным способом).
  2. Конфигурацию сборщика через соответствующий плагин для объявления общих зависимостей и точек входа.
  3. Оркестрацию загрузки (часто с помощью динамических import()).
  4. Управление состоянием и роутингом между приложениями.
  5. Обеспечение изоляции и согласованности UI/UX.

Таким образом, «плагин» — это важный технический исполнитель, но вся архитектура строится вокруг концепции и правильного выбора основного инструмента оркестрации.

Какой плагин отвечает за настройку Micro Frontend? | PrepBro