Налаштування 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
    1244
  • 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 забезпечують гнучкість та продуктивність. Замовте налаштування під ключ — ми налаштуємо архітектуру, яка масштабується без втрати швидкості.