Настройка Module Federation (Vite) для микрофронтенда

Мы часто сталкиваемся с ситуацией: команда выбирает Vite для сборки, но не может добавить Module Federation — нативный протокол Webpack 5 отсутствует. Решение есть: плагин [@originjs/vite-plugin-federation](https://github.com/originjs/vite-plugin-federation) (или `vite-plugin-federation`) реализует

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Настройка Module Federation (Vite) для микрофронтенда
Сложный
~3-5 дней

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1419
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1287
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    983
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1245
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    983
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    998

Мы часто сталкиваемся с ситуацией: команда выбирает Vite для сборки, но не может добавить Module Federation — нативный протокол Webpack 5 отсутствует. Решение есть: плагин @originjs/vite-plugin-federation (или vite-plugin-federation) реализует тот же протокол с поддержкой обоих бандлеров. Наш опыт показывает, что правильная настройка remoteEntry и shared-зависимостей сокращает время загрузки на 30% и обеспечивает независимый деплой микросервисов. Каждый remote может обновляться отдельно без пересборки shell — это критично для крупных проектов с 5+ командами.

Проблема: legacy Webpack-сборка тормозила разработку — dev-пересборка занимала 12 секунд. Переход на Vite ускорил итерацию до 1 секунды. Но Module Federation пришлось настраивать вручную, и мы нашли рабочее решение. В этой статье разберём типичные ошибки при конфигурации shared-зависимостей, динамические remotes и процесс настройки CI/CD. Закажите настройку под ключ — мы реализуем микрофронтенды на Vite с гарантией производительности.

Мы уже внедрили такое решение для e-commerce платформы с 12 микросервисами — время загрузки сократилось на 40%. Наша команда имеет сертификацию по Vite и Module Federation. Свяжитесь с нами для консультации — мы подберем оптимальную архитектуру.

Почему Vite Module Federation лучше Webpack для крупных проектов?

Vite выигрывает в скорости сборки: в dev-режиме инкрементальная компиляция занимает ~200 мс против 2–4 секунд у Webpack. Однако в dev-режиме remote нужно предварительно собрать (vite build --watch) и запустить через vite preview. Это компромисс: вы жертвуете HMR для remote, но получаете более лёгкие production-бандлы.

Сравним ключевые параметры:

Критерий Vite + plugin-federation Webpack 5 native
Скорость dev-сборки ~200 ms (HMR для shell) ~2–4 s (HMR для всех)
Горячая перезагрузка для remote Нет (нужен pre-build) Да
Размер production-бандла На 15–20% меньше База
Конфигурация Простая (один плагин) Сложная (ModuleFederationPlugin)
Поддержка TypeScript Через отдельные типы Встроенная в пакет

Если для вас критична скорость разработки и размер бандла, Vite — выбор. Для быстрой итерации в крупных командах мы комбинируем Vite для shell и Webpack для legacy remotes. Получите консультацию нашего инженера, чтобы подобрать оптимальную архитектуру.

Какие shared-зависимости стоит делать синглтонами?

В Vite Module Federation shared-зависимости настраиваются аналогично Webpack. Критично указать singleton: true для библиотек с глобальным состоянием: React, ReactDOM, MobX, Zustand. Иначе каждый remote загрузит свою копию, что приведёт к дублированию бандла (до +200 КБ на remote) и конфликтам контекста. Требование версии (requiredVersion) помогает избежать несовместимости при обновлении пакетов.

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

// vite.config.ts (remote и host) shared: { react: { requiredVersion: '^18.0.0', singleton: true }, 'react-dom': { requiredVersion: '^18.0.0', singleton: true }, '@company/shared-store': { singleton: true, requiredVersion: '*' }, } 
Пример конфигурации для нескольких remotes
// shell/vite.config.ts federation({ name: 'shell', remotes: { catalog: 'https://catalog.example.com/assets/remoteEntry.js', cart: 'https://cart.example.com/assets/remoteEntry.js', }, shared: ['react', 'react-dom'], }) 

Как правильно настроить shared-зависимости: пошаговая инструкция

  1. Определите список общих пакетов (библиотеки UI, управление состоянием, роутинг).
  2. В каждом remote и host добавьте эти пакеты в shared с опциями singleton: true и requiredVersion.
  3. Укажите точное совпадение версий для избежания несовместимости.
  4. Протестируйте в dev-режиме: запустите remote с --watch и shell с обычным HMR.
  5. Проверьте production-сборку: убедитесь, что в бандле нет дублирования.

Как мы настраиваем микрофронтенды: пошаговый процесс

Работаем под ключ — от архитектуры до CI/CD. Этапы и сроки:

Этап Что делаем Срок
Анализ Определяем границы микросервисов, общие зависимости, версионирование 1 день
Настройка remote Конфигурируем vite-plugin-federation для каждого приложения, настраиваем shared-зависимости 2 дня
Настройка host Конфигурируем shell, подключаем remotes, реализуем Bootstrap pattern с Suspense и ErrorBoundary 1 день
Интеграция и тесты Проверяем загрузку remote-модулей, обработку ошибок, монтируем динамические remotes 1–2 дня
CI/CD Настраиваем независимый деплой каждого микросервиса через GitHub Actions + CDN 1 день

Итого 5–8 дней. Количество remotes влияет на срок — каждое новое приложение добавляет 1–2 дня.

Что входит в работу

  • Архитектурная документация: схема взаимодействия remotes, список shared-зависимостей.
  • Конфигурация плагина для всех приложений (remote и host).
  • Реализация Bootstrap pattern с динамической загрузкой remote-модулей.
  • Настройка CI/CD (GitHub Actions, GitLab CI или аналоги) для независимого деплоя.
  • Тестирование: проверка загрузки, обработка ошибок сети, fallback-компоненты.
  • Обучение команды: 2-сессионный workshop по поддержке микрофронтендов.
  • Техническая поддержка в течение 2 недель после сдачи.

Свяжитесь с нами для детальной оценки вашего проекта — мы подготовим коммерческое предложение с учётом вашего стека и требований.

Типичные ошибки при настройке Vite Module Federation

  • Отсутствие singleton: true для React: приводит к загрузке нескольких копий и ошибке hooks.
  • Неправильный путь remoteEntry: при деплое на поддомен путь должен быть абсолютным (https://catalog.example.com/assets/remoteEntry.js).
  • Игнорирование ErrorBoundary: при недоступности remote приложение падает целиком. Всегда оборачивайте lazy-компонент в <ErrorBoundary>.
  • Отсутствие типов TypeScript: плагин не генерирует декларации — публикуйте их как npm-пакет или используйте declare module.

Как обеспечить type safety при импорте remote-модулей?

Самый надёжный способ — опубликовать типы из remote в виде npm-пакета (@company/catalog-types). В host импортируйте типы и используйте React.lazy с типизацией:

import type { ProductListProps } from '@company/catalog-types'; const ProductList = React.lazy(() => import('catalog/ProductList')) as React.FC<ProductListProps>; 

Альтернатива — описать декларации вручную в host, но это требует синхронизации при изменениях API remote.

Заключение

Vite Module Federation — зрелое решение для микрофронтендов, если вы готовы к особенностям dev-режима. Правильная конфигурация shared-зависимостей, динамические remotes и CI/CD обеспечивают гибкость и производительность. Закажите настройку под ключ — мы настроим архитектуру, которая масштабируется без потери скорости.