# Vite
- Can build modules that meet the `Module Federation` loading specifications.
- Can consume modules that adhere to the `Module Federation` specifications using aliases.
- Can configure shared dependencies for modules, so that when the host environment of the loaded module already has the corresponding dependency, it will not be loaded again.
- When a module has remote types, it automatically downloads and consumes the remote types.
:::warning Unsupported Options
Except for the [dev](/configure/dev.md) option, all options are supported.
:::
- roadmap 🗓️
- Consuming remote modules will have hot update capabilities.
- nuxt ssr
## Quick Start
### Installation
You can install the plugin with the following commands:
```sh [npm]
npm add @module-federation/vite --save
```
```sh [yarn]
yarn add @module-federation/vite --save
```
```sh [pnpm]
pnpm add @module-federation/vite --save
```
```sh [bun]
bun add @module-federation/vite --save
```
### Register the Plugin
In `Vite`, you can add the plugin through the `plugins` configuration item in the `vite.config.js` file:
```ts title='vite.config.js'
import { federation } from '@module-federation/vite';
module.exports = {
server: {
origin: 'http://localhost:2000',
port: 2000,
},
base: "http://localhost:2000",
plugins: [
federation({
name: 'vite_provider',
manifest: true,
remotes: {
esm_remote: {
type: "module",
name: "esm_remote",
entry: "https://[...]/remoteEntry.js",
},
var_remote: "var_remote@https://[...]/remoteEntry.js",
},
exposes: {
'./button': './src/components/button',
},
shared: {
react: {
singleton: true,
},
'react/': {
singleton: true,
},
},
}),
],
// Do you need to support build targets lower than chrome89?
// You can use 'vite-plugin-top-level-await' plugin for that.
build: {
target: 'chrome89',
},
};
```
## Configure the Build Plugin
- Type: `ModuleFederationPlugin(options: ModuleFederationOptions)`
- The configuration structure for the Module Federation plugin is as follows:
```ts
type ModuleFederationOptions = {
name: string;
filename?: string;
remotes?: Array<RemoteInfo>;
shared?: ShareInfos;
};
```
You can find detailed explanations of all configuration items on the [Configuration Overview](/configure/index.md) page.