Микрофронтенд на пальцах с module federation 2.0
Размер шрифта
Цвет фона и шрифта
Изображения
Озвучивание текста
Обычная версия сайта
HATED.RU разработка и SEO продвижение сайтов, контекстная реклама в РФ
Разработка сайтов, контекстная реклама и привлечение трафика
SEO продвижение в Иванове
+7 985 220-54-74
+7 985 220-54-74
+7 495 220-54-74
E-mail
info@hated.ru
Режим работы
Пн - Пт: 10.00 - 20.00 Сб - Вс: выходные
Услуги
  • Разработка сайтов на CMS "1с Битрикс"
    • Информационный сайт на готовом решении 1с Битрикс
    • Лендинг на готовом решении 1с Битрикс
    • Интернет-магазин на готовом решении 1с Битрикс
  • Контекстная реклама
    • Настройка контекстной рекламы «Уверенный старт»
    • Настройка контекстной рекламы Яндекс Директ «Быстрый старт»
    • Сопровождение контекстной рекламы "+"
    • Сопровождение контекстной рекламы
  • SEO продвижение сайтов
    • SEO‑аудит сайта: комплексный анализ для эффективного продвижения
    • Первичная SEO‑оптимизация сайта — залог эффективного продвижения!
    • SEO‑продвижение интернет‑магазина: рост продаж через поисковый трафик
    • SEO для «1С‑Битрикс»: выведем сайт в топ поиска за 3–6 месяцев
    • Накрутка поведенческих факторов (ПФ)
  • Разработка сайтов на конструкторе "Tilda"
    • Одностраничный сайт на тильде
Наши работы
  • Разработка сайтов на Drupal в Иванове |
  • Брендинг и айдентика в Иванове
  • Портфолио: сайты на 1С‑Битрикс в Иванове | Примеры работ
  • Разработка сайта на "Чистом коде" в Иванове
Магазин
  • Битрикс 24
  • Готовые шаблоны для cms 1c Bitrix
Компания
  • О компании
  • Лицензии
  • Реквизиты
Сертификаты
Статьи
Контакты
Новости
Информация
Иваново
Белгород
Брянкс
Владимир
Воронеж
Иваново
Калуга
Кострома
Красногорск
Курск
Липецк
Москва
Россия
Рязань
Тула
Иваново
Белгород
Брянкс
Владимир
Воронеж
Иваново
Калуга
Кострома
Красногорск
Курск
Липецк
Москва
Россия
Рязань
Тула
+7 985 220-54-74
+7 985 220-54-74
+7 495 220-54-74
E-mail
info@hated.ru
Режим работы
Пн - Пт: 10.00 - 20.00 Сб - Вс: выходные
HATED.RU разработка и SEO продвижение сайтов, контекстная реклама в РФ
Разработка сайтов, контекстная реклама и привлечение трафика
SEO продвижение в Иванове
Услуги
Наши работы
Магазин
Компания
Сертификаты
Статьи
Контакты
Новости
Информация
    HATED.RU разработка и SEO продвижение сайтов, контекстная реклама в РФ
    Услуги
    Наши работы
    Магазин
    Компания
    Сертификаты
    Статьи
    Контакты
    Новости
    Информация
      Иваново
      Белгород
      Брянкс
      Владимир
      Воронеж
      Иваново
      Калуга
      Кострома
      Красногорск
      Курск
      Липецк
      Москва
      Россия
      Рязань
      Тула
      +7 985 220-54-74
      +7 495 220-54-74
      E-mail
      info@hated.ru
      Режим работы
      Пн - Пт: 10.00 - 20.00 Сб - Вс: выходные
      HATED.RU разработка и SEO продвижение сайтов, контекстная реклама в РФ
      Телефоны
      +7 985 220-54-74
      +7 495 220-54-74
      E-mail
      info@hated.ru
      Режим работы
      Пн - Пт: 10.00 - 20.00 Сб - Вс: выходные
      HATED.RU разработка и SEO продвижение сайтов, контекстная реклама в РФ
      • Услуги
        • Услуги
        • Разработка сайтов на CMS "1с Битрикс"
          • Разработка сайтов на CMS "1с Битрикс"
          • Информационный сайт на готовом решении 1с Битрикс
          • Лендинг на готовом решении 1с Битрикс
          • Интернет-магазин на готовом решении 1с Битрикс
        • Контекстная реклама
          • Контекстная реклама
          • Настройка контекстной рекламы «Уверенный старт»
          • Настройка контекстной рекламы Яндекс Директ «Быстрый старт»
          • Сопровождение контекстной рекламы "+"
          • Сопровождение контекстной рекламы
        • SEO продвижение сайтов
          • SEO продвижение сайтов
          • SEO‑аудит сайта: комплексный анализ для эффективного продвижения
          • Первичная SEO‑оптимизация сайта — залог эффективного продвижения!
          • SEO‑продвижение интернет‑магазина: рост продаж через поисковый трафик
          • SEO для «1С‑Битрикс»: выведем сайт в топ поиска за 3–6 месяцев
          • Накрутка поведенческих факторов (ПФ)
        • Разработка сайтов на конструкторе "Tilda"
          • Разработка сайтов на конструкторе "Tilda"
          • Одностраничный сайт на тильде
      • Наши работы
        • Наши работы
        • Разработка сайтов на Drupal в Иванове |
        • Брендинг и айдентика в Иванове
        • Портфолио: сайты на 1С‑Битрикс в Иванове | Примеры работ
        • Разработка сайта на "Чистом коде" в Иванове
      • Магазин
        • Магазин
        • Битрикс 24
        • Готовые шаблоны для cms 1c Bitrix
      • Компания
        • Компания
        • О компании
        • Лицензии
        • Реквизиты
      • Сертификаты
      • Статьи
      • Контакты
      • Новости
      • Информация
      • Иваново
        • Города
        • Белгород
        • Брянкс
        • Владимир
        • Воронеж
        • Иваново
        • Калуга
        • Кострома
        • Красногорск
        • Курск
        • Липецк
        • Москва
        • Россия
        • Рязань
        • Тула
      • +7 985 220-54-74
        • Телефоны
        • +7 985 220-54-74
        • +7 495 220-54-74
      • info@hated.ru
      • Пн - Пт: 10.00 - 20.00 Сб - Вс: выходные

      Микрофронтенд на пальцах с module federation 2.0

      Создание сайтов и SEO продвижение сайтов любой тематики в Иванове и по всей России. Индивидуальная разработка сайтов и комплексный подход к SEO продвижению.
      —
      Новости
      —Микрофронтенд на пальцах с module federation 2.0
      20.03.2025
      Оформите заявку на сайте, мы свяжемся с вами в ближайшее время и ответим на все интересующие вопросы.
      Задать вопрос
      Микрофронтенд — это независимый модуль, который мы подключаем. Хост — это бандл, куда мы подключаем микрофронтенд. Remote — это бандл, который мы импортируем. Мы будем использовать следующий стек технологий: React, typescript, webpack, webpack mf 2.0.
      Микрофронтенды — это архитектурный подход к разработке фронтенд-приложений, который подразумевает разбиение пользовательского интерфейса на независимые, самодостаточные модули. Предлагаю пропустить плюсы и минусы данного подхода, так как о них уже довольно много написано, и перейти сразу к преимуществам выбора нашего основного инструмента, благодаря которому мы будем реализовывать этот подход.

      На самом деле инструментов на текущий момент очень много и каждый инструмент идеален по своему. Но чаще всего мой выбора падает на module federation 2.0 по нескольким причинам:
      •  Генерация типов

      • Обновления типов в реальном времени (type hot reload)

      • Глубокая интеграция с webpack. Все же при выборе сборщика я часто собираю на нем.

      А теперь когда нам стали ясны все плюсы, предлагаю начать с основного и посмотреть на наш базовый конфиг.

       type ModuleFederationOptions = {
      name: string; // Имя для module federation
      filename?: string; // Имя для remoteEntry
      remotes?: Array<RemoteInfo>; // Удаленные объекты, которые будет использовать приложение
      exposes?: PluginExposesOptions; // Это файлы, которые это приложение будет предоставлять как удаленные объекты другим приложениям.
      shared?: ShareInfos; // Конфигурация зависимостей
      dts?: boolean | PluginDtsOptions; // Контроль типов
      };

      Чтобы легче было понять что за что отвечает , давайте представим что у нас день рождения, а наш конфиг - это наша карточка которая подскажет гостям кто мы такие.

      1. Тогда получается что name - это ваше имя.
        Зачем нужно: Чтобы другие могли тебя найти и знали как к тебе обращаться.

      2. fileName - Имя файла, который ты раздал гостям, чтобы все знали что ты умеешь делать.
        Зачем нужно: Чтобы другие могли найти тебя и узнать что ты можешь делать и чем помочь.

      3. remotes - Список друзей, которых ты позвал на свой праздник.
        Зачем нужно: Чтобы найти приглашенных друзей и знать, кто тебе будет помогать и что они умеют.

      4. exposes - что ты сам умеешь делать и что можешь предложить другим.
        Зачем нужно: Чтобы другие знали чем ты можешь помочь.

      5. shared: Общие вещи которые вы с друзьями будете использовать вместе.
        Зачем нужно: Чтобы все пользовались чем то одним и не возникло конфликтов из за использования разных вещей, например как использовать на дне рождения все одинаковые тарелки и никого не обидеть.

      6. dts: инструкция.
         Зачем нужно: как работать друг с другом и не допускать ошибок.

      Давайте чуть более подробно поговорим о настройках shared. Вернемся к примеру с вечеринкой. Как мы помним shared - вещи которые вы с друзьями будете использовать вместе. Например собирать конструктор.

      1. singleton - в примере конструктора это как вы договорились использовать одинаковые детальки. Т.е. в техническом плане, наш модуль будет загружаться только один раз.
        Возможные проблемы: Если указать false, то мы столкнемся с проблемой что если у нас в одном приложении версия react 18, в другом 17 и еще в одном 16, то тогда будут загружены все три версии. Это влечет за собой большие проблемы, например: увеличение размера приложения(станет тяжелым, будет дольше грузится), конфликты совместимости, сложность в отладке(какая версия используется).
        Зачем нужно: Чтобы все использовали одни кубики, которые стыкуются друг с другом, иначе все может сломаться(в определенных случаях, так как сейчас мы говорим о том что используем одинаковые версии).

      2. eager  - сразу выкладываем все части конструктора на стол, что бы мы понимали что будем использовать. Т.е. загружаем модуль сразу после инициализации а не по требованию.
        Зачем нужно: Зачем тратить время на поиск деталей, если они все будут на столе перед нами.

      3. requiredVersion: Версия деталей.
        Зачем нужно: Чтобы все использовали одинаковые детальки.

      А теперь когда мы знаем как зачем и что нужно, то после настройки нашего конфига мы можем описать нашу точку входа. Для базового использования микрофронтов, достаточно лишь немного видоизменить входную точку. Раньше наша точка входа (index.tsx) могла выглядеть так:

      // index.tsx
      import BusinessСard from '@exposes/BusinessСard/BusinessСard';
      const root = ReactDOM.createRoot(document.getElementById('root'));
      root.render(<BusinessСard value='Карточка' />);

      Сейчас же точка входа разбивается на 2 файла.

      Это файл index.ts и bootstrap.tsx

      // index.ts
      void import('./bootstrap');
      export {};
      // bootstrap.tsx
      const BusinessСard = lazy(() => import('firstApp/BusinessСard'));
      const root = ReactDOM.createRoot(document.getElementById('root'));
      root.render(
      <Suspense fallback={<Loader />}>
      <BusinessСard value='Карточка' />
      </Suspense>,
      );

      Но тут же возникают вопросы:

      1. Зачем мы разбиваем входную точку index.ts на два файла?
        Основная задача файла index.ts (точки входа) — загрузить и выполнить код из bootstrap.tsx. Наш index.ts теперь загружается асинхронно, что очень важно: на момент загрузки у нас ещё нет информации о том, какие версии могут быть предоставлены другими микрофронтами. Все эти зависимости будут вынесены в отдельные чанки и загружены позже. (bootstrap нужен только для тех, кто экспортирует модули)

      2. Зачем нужен динамический импорт?
        Он создаёт отдельный чанк для загружаемого модуля и помогает загрузить его только тогда, когда это действительно необходимо.

      3. Также прошу обратить внимание на <Suspense>
        Этот компонент позволяет управлять состоянием загрузки асинхронных компонентов. Часто встречается подход, когда в <Suspense> оборачивают всё приложение, и на этом его использование заканчивается. Однако лучше оборачивать каждый компонент отдельно — это предотвратит "моргание" интерфейса и не превратит всю страницу в скелетон.

      И так, теперь когда нам ясна основанная техническая часть, давайте дополним это теорией. Ниже вы увидите диаграмму от Тобиаса Коперса - создателя webpack,  которая показывает как все элементы системы работают.

      У нас есть хост, мы открываем страничку с основного сайта и 

      1. Браузер по скрипту начинает загружать наше приложение.

      2. Далее подключаем remoteEntry, то есть происходит загрузка и извлечение бандла.Стоит отметить что скрипты могут загружаться параллельно, но при этом каждое приложение знает кто станет хостом а кто ремоутом. 

      3. Как только загрузился хост, он начинает загружать приложение, запуск меняется с синхронного на асинхронный.

      4. Приложение загружается и уже понимает что в нем есть некий удаленный компонент, например в нашем случае бизнес карточка, которая грузится из какого то scope. 

        4.1 Происходит проверка версий, для того чтобы модуль реакта понимал какую версию ему необходимо взять. (не забываем про флаг сингл тон).

        4.2 Приходит запрос получить карточку.

      5. Далее инициализируется скоуп, куда передается версия реакта.

        5.1 ) Скоуп загружает модуль с remote. При этом для ремоут батона проверяется стоит ли грузить все заново или подгрузить какие то чанки отдельно, например стили , шрифты и т.д.

      6. После чего, если ошибок нет, то модуль возвращает нам асинхронный модуль бизнес карточки.

      Давайте вкратце посмотрим на реальном примере, как всё это работает. Запускаем приложение и открываем DevTools.

      Мы видим, как сначала загружается наше приложение: браузер по скрипту запустил основное приложение, после чего загрузился наш микрофронт. В сетевых запросах мы видим чанки основного приложения, а затем - наш remoteEntry.js (файл, который содержит информацию о модулях, предоставляемых микрофронтендом).

      Далее мы просто берём нашу бизнес-карточку, и если всё хорошо, то получаем её. И всё! На самом деле, ничего сложного здесь нет. На текущий момент большинство ошибок, с которыми вы столкнётесь, хорошо описаны в документации.

      Единственное, на что я хотел бы обратить особое внимание — обязательно проверяйте латиницу в путях вашего приложения. К сожалению, об этой ошибке мало где упоминается, и мне пришлось потратить немало времени, чтобы понять, почему моё приложение запускается, но типы не генерируются.

      К слову о генерации: я предлагаю также на простом примере посмотреть, как работает генерация типов и обработка ошибок.

      Итак, мы выводим нашу карточку


      Дополнительно
      Назад к списку
      Наши специалисты ответят на любой интересующий вопрос
      Задать вопрос
      Проекты
      Разработка сайтов на Drupal в Иванове |
      Брендинг и айдентика в Иванове
      Портфолио: сайты на 1С‑Битрикс в Иванове | Примеры работ
      Разработка сайта на "Чистом коде" в Иванове
      Фото компании
      Услуги
      Разработка сайтов на CMS "1с Битрикс"
      Контекстная реклама
      SEO продвижение сайтов
      Разработка сайтов на конструкторе "Tilda"
      Статьи
      Новости
      О компании
      Сертификаты
      Реквизиты
      +7 985 220-54-74
      +7 985 220-54-74
      +7 495 220-54-74
      E-mail
      info@hated.ru
      Режим работы
      Пн - Пт: 10.00 - 20.00 Сб - Вс: выходные
      info@hated.ru
      © 2026 Разработка сайтов, контекстаная реклама,веб-дизайн hated
      Версия для слабовидящих
      Карта сайта
      Главная Услуги Контакты Проекты Акции
      hacklink panel |
      betgamon |
      casino |
      casinolevant |
      deneme bonusu veren yeni siteler |
      bahis siteleri |
      casinolevant |
      casinolevant |
      casinolevant |
      deneme bonusu veren yeni siteler |
      bahis siteleri |
      casinolevant |
      gamdom |
      gamdom giriş |
      deneme bonusu veren yeni siteler |
      deneme bonusu veren yeni siteler |
      deneme bonusu veren siteler 2026 |
      bahis siteleri |
      gamdom |
      gamdom giriş |
      gamdom |
      türk ifşa |
      casinolevant |
      casinolevant |
      casinolevant |
      bahislion |
      bahislion |
      türk liseli ifşa |
      türk porno |
      bahislion |
      bahislion |
      bahislion |
      casinolevant giriş |
      belugabahis giriş |
      deneme bonusu veren siteler |
      deneme bonusu veren siteler |
      betmatik giriş |
      hoşgeldin bonusu veren siteler |
      bahis siteleri |
      casino siteleri |
      casino siteleri |
      betmatik giriş |