Безопасно отображайте динамические удаленные приложения React с помощью Module Federation.

Как мы можем безопасно, эффективно и эффективно использовать Динамические удаленные контейнеры Webpack Module Federation в приложении React microfrontend?

Начнем с видения того, что мы хотим:

RemoteComponent — это компонент React, который мы можем использовать в нашем приложении для рендеринга модулей из удаленного приложения. Он инкапсулирует:

  • ErrorBoundary для безопасного рендеринга удаленного кода без нарушения работы нашего хост-приложения.
  • Отложенная загрузка для разрешения удаленного кода по мере необходимости без блокировки рендеринга остальной части нашего приложения.
  • Получение и управление динамическими удаленными контейнерами.

Вот реализация:

Мы лениво загружаем Component, который мы получаем из loadComponent(), и оборачиваем его вокруг ErrorBoundary, чтобы предотвратить сбой всего приложения, если что-то пойдет не так. При загрузке удаленного приложения мы используем React.Suspense для отображения индикатора загрузки.

useRemoteUrl() — это хук React, управляющий URL-адресами наших удаленных приложений. Детали не имеют решающего значения для этого примера, но вы можете реализовать управление URL-адресами разными способами в зависимости от вашего варианта использования. Важным моментом является то, что мы можем получить URL-адрес для передачи утилите loadComponent, которая управляет удаленными контейнерами:

Мы загружаем удаленное приложение только один раз, даже если повторно используем его компоненты в нашем приложении. Контейнер, который мы извлекаем, должен соответствовать интерфейсу get/init, ожидаемому Module Federation. Лучше всего это работает, если в конфигурации Webpack нашего удаленного приложения используется подключаемый модуль Module Federation.

fetchRemote() обрабатывает получение файла remoteEntry.js удаленного приложения. Во-первых, он создает новый тег script, а затем внедряет его в DOM для получения удаленного javascript:

Вуаля! У нас есть механизм для надежного извлечения и рендеринга удаленных приложений в нашем микроинтерфейсе React.

Теперь давайте посмотрим на это в действии:

Посмотрите живой пример здесь: https://micro-frontend-demo-main.vercel.app/

Исходный код: ссылка

Пошаговое руководство по использованию Module Federation в React можно найти в одной из моих других статей: