Мы часто сталкиваемся с ситуацией: команда выбирает 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-зависимости: пошаговая инструкция
- Определите список общих пакетов (библиотеки UI, управление состоянием, роутинг).
- В каждом remote и host добавьте эти пакеты в
sharedс опциямиsingleton: trueиrequiredVersion. - Укажите точное совпадение версий для избежания несовместимости.
- Протестируйте в dev-режиме: запустите remote с
--watchи shell с обычным HMR. - Проверьте 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 обеспечивают гибкость и производительность. Закажите настройку под ключ — мы настроим архитектуру, которая масштабируется без потери скорости.







