Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про 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 остаётся хорошим выбором для небольших или средних проектов, где сложность распределённой архитектуры не оправдана.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    7

Навыки

  • Webpack

    Webpack

  • JavaScript

    JavaScript

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

#Module Federation

#monorepo

#SPA

#micro frontends

#webpack

#code splitting

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию