Федерация модулей: динамический импорт во время выполнения
Разберитесь, как федерация модулей Webpack загружает удалённые модули во время выполнения, не включая их в сборку основного приложения
«Федерация модулей: динамический импорт во время выполнения» — бесплатный урок React Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.
Проблема, которую решает Module Federation
В организации с несколькими фронтенд-командами нескольким независимо разворачиваемым приложениям часто требуется совместно использовать компоненты пользовательского интерфейса и утилиты. Публикация в npm требует увеличить версию, выпустить новый релиз и полностью повторно развернуть каждое приложение-потребитель, создавая тесную связанность между командами и замедляя циклы разработки.
Подход с npm и его недостатки
Традиционный подход — публиковать общий код как пакет npm — означает, что для обновления общего компонента кнопки необходимо обновить пакет npm, опубликовать новую версию, обновить package.json каждого приложения-потребителя, пересобрать и повторно развернуть все приложения-потребители. Module Federation устраняет все эти шаги.
Что делает Module Federation
Module Federation позволяет одному приложению («удалённому») предоставлять JavaScript-модули, которые другое приложение («хост») загружает и выполняет во время работы, без пересборки или повторного развёртывания хоста. Когда пользователь загружает приложение-хост, оно динамически получает модули удалённого приложения по мере необходимости.
Встроенная поддержка в Webpack 5
Webpack 5 представил Module Federation как полноценную встроенную возможность через ModuleFederationPlugin. До Webpack 5 аналогичные схемы требовали сложной ручной настройки или сторонних плагинов. Плагин автоматически управляет всей динамической загрузкой и общей областью модулей.
Ключевые понятия: удалённые приложения
Удалённое приложение — это независимо разворачиваемое приложение, предоставляющее один или несколько модулей — компоненты React, утилиты или целые страницы функциональности — для использования другими приложениями. Удалённое приложение создаёт манифест remoteEntry.js, описывающий предоставляемые им модули и способ их загрузки.
Ключевые понятия: хосты
Хост — это приложение, использующее модули одного или нескольких удалённых приложений. Хост указывает удалённые приложения по имени и URL в конфигурации Webpack. Когда код хоста импортирует модуль удалённого приложения, среда выполнения Module Federation в Webpack динамически получает и выполняет его по URL удалённого приложения.
Ключевые понятия: общие модули
Общие модули — это библиотеки, например React и React DOM, которые должны загружаться только один раз, даже если они включены и в хост, и в удалённое приложение. Если объявить React общим модулем с единственным экземпляром, Module Federation гарантирует запуск только одной версии React — это крайне важно, поскольку хуки React не работают с несколькими экземплярами.
Манифест remoteEntry.js
При сборке удалённого приложения Webpack создаёт файл remoteEntry.js с указанным именем. Этот файл представляет собой лёгкий манифест и загрузочный скрипт: он объявляет предоставляемые удалённым приложением модули, перечисляет URL их фрагментов и инициализирует общую область. Хост сначала загружает этот файл, чтобы узнать, что предлагает удалённое приложение.
Механика загрузки во время выполнения
Когда хост встречает импорт из модуля удалённого приложения, он проверяет, загружен ли уже код этого удалённого приложения. Если нет, хост получает remoteEntry.js по URL удалённого приложения, инициализирует общую область, согласовывая версии общих библиотек, а затем загружает и выполняет конкретный фрагмент, содержащий запрошенный модуль.
Независимое развёртывание на практике
Команда разворачивает новую версию удалённого приложения с обновлённым компонентом кнопки, не затрагивая приложение-хост. Следующий пользователь, загрузивший хост, автоматически получает новый компонент кнопки, поскольку хост всегда получает данные по текущему URL remoteEntry.js удалённого приложения. Пересборка хоста не требуется, повторное развёртывание хоста не требуется, координация не нужна.
Module Federation и фреймы
В более старом подходе к микроинтерфейсам для изоляции разделов, принадлежащих командам, используются фреймы. Фреймы обеспечивают сильную изоляцию, но чрезвычайно усложняют совместное состояние, маршрутизацию URL и оформление. Module Federation сохраняет всё в одном контексте JavaScript, обеспечивая общую маршрутизацию, общее состояние аутентификации и единообразное оформление.
Манифест удалённого приложения Module Federation
Какова роль remoteEntry.js в Module Federation?
Итоги урока
Module Federation решает проблему независимого развёртывания общего фронтенд-кода, обеспечивая загрузку модулей во время выполнения. Удалённые приложения предоставляют модули через remoteEntry.js, а хосты динамически используют их без пересборки. Общие модули с единственным экземпляром, такие как React и React DOM, предотвращают повторную загрузку библиотек. Эта архитектура обеспечивает настоящее независимое развёртывание: обновите удалённое приложение — и все приложения-хосты сразу увидят изменения.
Часто задаваемые вопросы
Урок «Федерация модулей: динамический импорт во время выполнения» бесплатный?
Да — полный текст урока «Федерация модулей: динамический импорт во время выполнения» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.
Чему я научусь в уроке «Федерация модулей: динамический импорт во время выполнения»?
Разберитесь, как федерация модулей Webpack загружает удалённые модули во время выполнения, не включая их в сборку основного приложения Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать React Academy?
Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Федерация модулей: динамический импорт во время выполнения»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке React Academy?
Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Федерация модулей: динамический импорт во время выполнения
- Настройка приложений React: основного и удалённых
- Общий доступ к состоянию и маршрутизации между удалёнными приложениями
- Версионирование, развёртывание и оркестрация