Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Webpack: Module Federation, monorepo, SPA, micro frontends, webpack, code splitting

В чем отличие Module Federation от монорепозитория и одной большой SPA?

Вопрос проверяет понимание современных подходов к организации фронтенд-архитектуры, а именно различий между изолированной монолитной SPA, монорепозиторием и динамической композицией приложений через Module Federation.

Короткий ответ

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

Длинный ответ

В современной веб-разработке существует несколько стратегий организации кодовой базы и сборки приложений, каждая из которых решает разные проблемы масштабирования и командной работы.

Одна большая SPA (Монолит)

Это классический подход: всё приложение — один проект, одна сборка, один деплой. Все компоненты, страницы и библиотеки связаны на этапе сборки. Плюсы: простота начальной настройки, легкий рефакторинг в рамках одного проекта. Минусы: по мере роста кодовая база становится громоздкой, сборки замедляются, обновления требуют деплоя всего приложения, и командам сложно работать независимо.

Монорепозиторий (Monorepo)

Monorepo — это практика хранения кода нескольких проектов или пакетов в одном репозитории Git. Это может быть как несколько независимых SPA, так и набор библиотек с общими зависимостями. Инструменты вроде Lerna, Nx или Yarn Workspaces помогают управлять зависимостями и скриптами между пакетами. Ключевое отличие: сборка и деплой могут быть как централизованными (всё собирается вместе), так и изолированными (каждый пакет — отдельная сборка). Monorepo улучшает совместную работу над общим кодом, но не решает проблему независимого деплоя и выполнения.

Module Federation

Это технология, встроенная в Webpack 5, которая позволяет одному JavaScript-приложению динамически загружать код из другого приложения во время выполнения (runtime). По сути, это реализация концепции Micro Frontends на уровне сборки. Приложения (хосты и удалённые модули) собираются и развёртываются полностью независимо. Хост-приложение может загрузить, например, компонент React или целый маршрут с другого домена. Это обеспечивает истинную независимость команд и возможность поэтапного обновления частей большого приложения.

Сравнение на практике

  • Связность: SPA — жёсткая связь на этапе сборки. Monorepo — связь на уровне кода и зависимостей. Module Federation — слабая связь во время выполнения.
  • Деплой: В SPA и монолитном Monorepo деплой всего приложения. В Module Federation — независимый деплой каждого микрофронтенда.
  • Размер бандла: SPA может иметь огромный начальный бандл. Module Federation позволяет загружать код по требованию с разных источников.

Пример конфигурации Module Federation

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

module.exports = {
  plugins: [
    new ModuleFederationPlugin({
      name: 'remote_app',
      filename: 'remoteEntry.js',
      exposes: {
        './Button': './src/components/Button', // Экспортируем компонент
      },
      shared: { react: { singleton: true } }, // Общие зависимости
    }),
  ],
};

// webpack.config.js хоста (host)
new ModuleFederationPlugin({
  name: 'host_app',
  remotes: {
    remote_app: 'remote_app@http://localhost:3001/remoteEntry.js',
  },
  shared: { react: { singleton: true } },
});

// Код в хостовом приложении для динамической загрузки
const RemoteButton = React.lazy(() => import('remote_app/Button'));

Вывод: Module Federation стоит применять, когда нужно построить большое приложение, над разными частями которого работают независимые команды, с возможностью отдельного развёртывания и обновления компонентов. Monorepo лучше подходит для централизованного управления множеством пакетов или проектов с общим кодом, но без требований к независимому runtime. Одна SPA остаётся хорошим выбором для небольших или средних проектов, где сложность распределённой архитектуры не оправдана.

Уровень

  • Рейтинг:

    4

  • Сложность:

    7

Навыки

  • Webpack

    Webpack

  • JavaScript

    JavaScript

Ключевые слова

#Module Federation

#monorepo

#SPA

#micro frontends

#webpack

#code splitting

Подпишись на React Developer в телеграм