全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-23 8 分钟 ✍️ juanwangdev

Module Federation 集成

Module Federation 允许不同应用之间动态共享模块代码。

安装插件

Bash
npm add -D @originjs/vite-plugin-federation

主应用配置

JavaScript
import federation from '@originjs/vite-plugin-federation'

export default defineConfig({
  plugins: [
    federation({
      name: 'host-app',
      remotes: {
        // 远程子应用
        subAppA: 'http://localhost:3001/assets/remoteEntry.js',
        subAppB: 'http://localhost:3002/assets/remoteEntry.js'
      },
      shared: ['vue', 'vue-router']  // 共享依赖
    })
  ]
})

子应用配置

JavaScript
import federation from '@originjs/vite-plugin-federation'

export default defineConfig({
  plugins: [
    federation({
      name: 'subAppA',
      filename: 'remoteEntry.js',
      exposes: {
        // 暴露模块
        './Button': './src/components/Button.vue',
        './utils': './src/utils/index.js'
      },
      shared: ['vue']
    })
  ],
  build: {
    target: 'esnext',
    minify: false,
    cssCodeSplit: false
  }
})

注意:子应用需 exposes 暴露模块供主应用使用。

主应用使用远程模块

JavaScript
// 导入远程模块
import Button from 'subAppA/Button'
import { formatDate } from 'subAppA/utils'

// 在组件中使用
<Button />

配置说明

配置项说明
name应用名称
remotes远程应用入口
exposes暴露的模块
shared共享的依赖

共享依赖配置

JavaScript
shared: {
  vue: {
    singleton: true,   # 单例模式
    requiredVersion: '^3.0.0'
  },
  lodash: {
    eager: true  # 提前加载
  }
}

构建产物

Bash
主应用 dist/
├── assets/
│   ├── index.js
│   └── remoteEntry.js  # 联邦入口

子应用 dist/
├── assets/
│   ├── remoteEntry.js  # 暴露入口
│   ├── Button.js       # 暴露模块
│   └── utils.js

运行顺序

JavaScript
# 先构建子应用
cd subAppA && npm run build

# 再构建主应用
cd host && npm run build

开发模式调试

text
export default defineConfig({
  plugins: [
    federation({
      // 开发模式指向本地开发服务器
      remotes: {
        subAppA: 'http://localhost:3001/assets/remoteEntry.js'
      }
    })
  ]
})

要点总结

  • @originjs/vite-plugin-federation 实现模块联邦
  • remotes 配置远程应用入口
  • exposes 暴露本地模块
  • shared 共享依赖避免重复

📝 发现内容有误?点击此处直接编辑

← 上一篇 SSR 错误处理与降级
下一篇 → 共享依赖版本管理
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库