Введение:

Федерация модулей, мощная функция, представленная в Webpack 5, позволяет разработчикам загружать отдельные пакеты кода во время выполнения, что делает ее идеальным выбором для реализации архитектуры микроинтерфейса. Эта статья проведет вас через процесс создания микроинтерфейса приложения React с использованием Module Federation, уделяя особое внимание предоставлению четких примеров кода. Мы также обсудим плюсы и минусы использования Module Federation для вашего микроинтерфейса.

Шаг 1. Настройте новый проект React с помощью Webpack 5

  1. Создайте новый каталог для вашего проекта и перейдите в него:
mkdir react-module-federation
cd react-module-federation

2. Инициализируйте новый проект npm:

npm init -y

3. Установите необходимые зависимости:

npm install react react-dom webpack@5 webpack-cli webpack-dev-server html-webpack-plugin

4. Создайте каталог «src» и файл «index.html»:

mkdir src
touch src/index.html

5. Добавьте следующее содержимое в «src/index.html»:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>React Module Federation</title>
  </head>
  <body>
    <div id="app"></div>
  </body>
</html>

Шаг 2. Настройте Webpack для объединения модулей

  1. Создайте файл webpack.config.js в корне проекта:
touch webpack.config.js

2. Добавьте следующее содержимое в «webpack.config.js»:

const HtmlWebpackPlugin = require('html-webpack-plugin');
const ModuleFederationPlugin = require('webpack/lib/container/ModuleFederationPlugin');

module.exports = {
  mode: 'development',
  entry: './src/index.js',
  output: {
    publicPath: 'auto',
  },
  devServer: {
    port: 3000,
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './src/index.html',
    }),
    new ModuleFederationPlugin({
      name: 'mainApp',
      remotes: {
        microApp: 'microApp@http://localhost:3001/remoteEntry.js',
      },
    }),
  ],
  module: {
    rules: [
      {
        test: /\.jsx?$/,
        exclude: /node_modules/,
        use: 'babel-loader',
      },
    ],
  },
};

Шаг 3. Создайте микроинтерфейсное приложение

  1. Перейдите в корень проекта и создайте новое микроинтерфейсное приложение:
npx create-react-app micro-app --template cra-template-pwa

2. Измените файл «micro-app/package.json», включив в него следующие сценарии:

"scripts": {
  "start": "webpack serve",
  "build": "webpack --mode production"
}

3. Обновите «micro-app/webpack.config.js», включив в него следующие плагины:

// ...
plugins: [
  // ...
  new ModuleFederationPlugin({
    name: 'microApp',
    filename: 'remoteEntry.js',
    exposes: {
      './MicroApp': './src/App',
    },
    shared: ['react', 'react-dom'],
  }),
  // ...
],
// ...

4. Обновите «micro-app/src/index.js»:

import React from 'react';
import ReactDOM from 'react-dom';
import MicroApp from './App';

if (process.env.NODE_ENV === 'development') {
  ReactDOM.render(<MicroApp/>, document.getElementById('root'));
}

export default MicroApp;

Шаг 4. Интегрируйте микроинтерфейс в основное приложение

1. Создайте файл index.js в каталоге src:

touch src/index.js

2. Добавьте следующее содержимое в «src/index.js»:

import React from 'react';
import ReactDOM from 'react-dom';
import MicroApp from 'microApp/MicroApp';

ReactDOM.render(
  <React.StrictMode>
    <MicroApp />
  </React.StrictMode>,
  document.getElementById('app')
);

3. Запустите сервер разработки микроинтерфейса:

cd micro-app
npm start

4. Запустите основной сервер разработки приложений:

cd ..
npm start

Плюсы:

  • Встроен в Webpack 5, дополнительные библиотеки не нужны.
  • Позволяет обмениваться зависимостями между приложениями
  • Улучшает производительность за счет уменьшения размера пакета

Минусы:

  • Требуется веб-пакет 5
  • Менее зрелый по сравнению с одинарным спа

Вывод:

В этом пошаговом руководстве показано, как создать микроинтерфейсное приложение React с помощью Module Federation с Webpack 5. Module Federation предлагает мощный способ реализации архитектуры микроинтерфейса, позволяющий совместно использовать код и уменьшающий размер пакета. Однако для этого требуется Webpack 5, и он менее развит по сравнению с альтернативами, такими как single-spa. Оценив плюсы и минусы Module Federation, вы сможете определить, подходит ли этот подход для вашего микроинтерфейсного приложения.

Не забывайте хлопать 👏

Удачного кодирования 🚀

Узнать больше: