# Rspack Plugin

:::info 注意
需要 Rspack 0.5.0 及以上版本。
:::

- 能够构建出满足 `Module Federation` 加载规范的模块
- 能够使用别名消费 `Module Federation` 规范的模块
- 能够设置模块的共享依赖配置，当加载模块的宿主环境已经存在对应依赖时将不会重复加载
- 当模块具备远程类型时将会自动把远程模块的类型下载下来消费
- 消费远程模块时将具备热更新能力

## 快速开始

### 安装

你可以通过如下的命令安装插件：

import { PackageManagerTabs } from '@theme';

<PackageManagerTabs
  command={{
    npm: `
npm add @module-federation/enhanced
    `,
    yarn: `
yarn add @module-federation/enhanced
    `,
    pnpm: `
pnpm add @module-federation/enhanced
    `,
    bun: `
bun add @module-federation/enhanced
    `,
  }}
/>

### 注册插件

#### Rspack

在 [Rspack](https://rspack.dev/) 中，你可以通过 `rspack.config.js` 配置文件来添加插件：

```ts title="rspack.config.js"
const { ModuleFederationPlugin } = require('@module-federation/enhanced/rspack');

module.exports = {
  devServer: {
    port: 2000,
  },
  output: {
    // 需要设置一个唯一值，不能和其他应用相等
    uniqueName: 'federation_provider',
    // 使用 manifest 必须要配置 publicPath
    publicPath: 'http://localhost:2000/',
  },
  plugins: [
    new ModuleFederationPlugin({
      name: 'federation_provider',
      exposes: {
        './button': './src/button.tsx',
      },
      shared: ['react', 'react-dom'],
    }),
  ],
};
```

## 配置构建插件

- Type: `ModuleFederationPlugin(options: ModuleFederationOptions)`

- Module federation 插件的配置结构如下所示：

```ts
type ModuleFederationOptions {
    name: string;
    filename?: string,
    remotes?: Array<RemoteInfo>;
    shared?: ShareInfos;
};
```

你可以在 [Config 总览](../../configure/index) 页面找到所有配置项的详细说明。
