0Pricing
React Academy · Урок

Настройка приложений React: основного и удалённых

Настройте экспортируемые модули, удалённые приложения и общие зависимости в webpack.config.js для оболочки основного приложения и двух удалённых приложений React

«Настройка приложений React: основного и удалённых» — бесплатный урок React Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.

webpack.config.js удалённого приложения: ModuleFederationPlugin

Удалённое приложение добавляет ModuleFederationPlugin в конфигурацию Webpack с тремя ключевыми свойствами: name (уникальный идентификатор, например «buttonApp»), filename («remoteEntry.js» — выходной манифест) и exposes (карта от общедоступного имени к пути исходного файла).

Предоставление компонентов удалённым приложением

Конфигурация exposes сопоставляет общедоступный путь к модулю с локальным файлом: { './Button': './src/Button' }. Это означает, что хост может импортировать 'buttonApp/Button' и получить компонент из ./src/Button.tsx. Можно предоставлять несколько компонентов, утилит или даже целых страниц.

Общая конфигурация удалённого приложения

Свойство shared сообщает Module Federation, какие модули следует сделать общими для хоста и удалённого приложения, а не дублировать. Для React: shared: { react: { singleton: true, requiredVersion: deps.react }, 'react-dom': { singleton: true } }. Параметр singleton:true не позволяет одновременно загружать несколько экземпляров.

webpack.config.js хоста: указание удалённых приложений

Конфигурация ModuleFederationPlugin приложения-хоста включает свойство remotes: { buttonApp: 'buttonApp@http://localhost:3001/remoteEntry.js' }. Ключ — это пространство имён импорта, а значение — имя удалённого приложения и его URL, объединённые символом @. Так Webpack узнаёт, откуда получать удалённое приложение во время выполнения.

Использование удалённого приложения в React

В коде React хоста импортируйте компонент удалённого приложения с помощью динамического импорта: const Button = React.lazy(() => import('buttonApp/Button')). Путь импорта соответствует пространству имён удалённого приложения и имени предоставленного модуля. React.lazy разделяет код импорта на отдельный фрагмент и загружает его асинхронно.

Обертывание в Suspense

Поскольку удалённые модули загружаются асинхронно, всегда оборачивайте лениво импортируемый компонент удалённого приложения в границу Suspense: Suspense fallback=Loading... /. Резервное содержимое отображается, пока Module Federation получает remoteEntry.js и фрагмент компонента по URL удалённого приложения.

Почему модули с единственным экземпляром критически важны

Хуки React (useState, useContext, useEffect) зависят от одного внутреннего экземпляра React, отслеживающего состояние компонентов. Если и хост, и удалённое приложение загрузят собственную копию React, хуки вызовут ошибки «недопустимый вызов хука». Параметр singleton:true заставляет их совместно использовать один экземпляр React и полностью устраняет этот класс ошибок.

Разрешение конфликтов версий

Когда хост использует react@18.2.0, а удалённое приложение — react@18.3.0, общая область Module Federation согласовывает используемую версию. При singleton:true и requiredVersion обычно выбирается более новая версия, если она совместима. Указание requiredVersion: '>=18.0.0' вместо фиксированной версии разрешает гибкие диапазоны версий.

TypeScript: объявления модулей

TypeScript не знает о модулях удалённых приложений во время компиляции, поэтому импорты вроде import('buttonApp/Button') без объявлений вызовут ошибки типов. Используйте @module-federation/typescript или вручную создайте файлы .d.ts, объявляющие типы модулей, чтобы обеспечить проверку типов свойств удалённых компонентов.

Локальное тестирование настройки

Запустите оба приложения одновременно: удалённое приложение на порту 3001, а хост — на порту 3000. Откройте хост — его среда выполнения Module Federation получит http://localhost:3001/remoteEntry.js, обнаружит модуль Button, загрузит его фрагмент и отрисует его внутри приложения-хоста как локальный компонент.

Настройка URL для рабочей среды

В рабочей среде замените localhost:3001 на URL развёрнутого удалённого приложения. Распространённый подход — использовать переменную окружения для URL удалённого приложения, чтобы CI/CD могло подставить правильный URL для каждой среды: buttonApp: 'buttonApp@' + process.env.BUTTON_REMOTE_URL + '/remoteEntry.js'.

Общие модули с единственным экземпляром

Почему React должен быть настроен как модуль с единственным экземпляром в общей конфигурации Module Federation?

Итоги урока

Для настройки Module Federation необходимо добавить ModuleFederationPlugin и в удалённое приложение (с name, filename и exposes), и в хост (с remotes). Используйте компоненты удалённых приложений через React.lazy и динамический импорт, обёрнутые в Suspense. React и React DOM должны быть общими модулями с единственным экземпляром, чтобы предотвратить ошибки хуков из-за нескольких экземпляров. Объявления TypeScript и URL удалённых приложений через переменные окружения завершают настройку, готовую для рабочей среды.

Часто задаваемые вопросы

Урок «Настройка приложений React: основного и удалённых» бесплатный?

Да — полный текст урока «Настройка приложений React: основного и удалённых» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.

Чему я научусь в уроке «Настройка приложений React: основного и удалённых»?

Настройте экспортируемые модули, удалённые приложения и общие зависимости в webpack.config.js для оболочки основного приложения и двух удалённых приложений React Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать React Academy?

Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Настройка приложений React: основного и удалённых»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке React Academy?

Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Федерация модулей: динамический импорт во время выполнения
  2. Настройка приложений React: основного и удалённых
  3. Общий доступ к состоянию и маршрутизации между удалёнными приложениями
  4. Версионирование, развёртывание и оркестрация
← Назад к React Academy