You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue3 CLI搭配Webpack Module Federation组件从错误宿主加载问题

问题原因

这个是Vue CLI与Webpack Module Federation配合时的常见配置问题,不属于未知bug:
Vue CLI默认会将webpack的publicPath设置为/,组件提供方打包输出的异步chunk没有绑定自身服务的域名前缀,宿主加载远程chunk时会默认使用当前宿主的域名拼接路径,就出现了你遇到的从8000端口加载远程组件的问题。

修复方案

你只需要修改**组件提供方(运行在8001端口的项目)**的配置即可:

方案1:显式配置publicPath(推荐)

修改组件提供方的vue.config.js,新增publicPath配置项,开发环境写死为8001的完整服务地址,生产环境替换为实际部署的域名路径即可:

const { ModuleFederationPlugin } = require('webpack').container

module.exports = {
  // 新增这一行,注意结尾要带斜杠
  publicPath: process.env.NODE_ENV === 'development' ? 'http://localhost:8001/' : '/你的生产环境部署路径/',
  configureWebpack: {
    plugins: [
      new ModuleFederationPlugin({
        name: 'component',
        filename: 'remoteEntry.js',
        remotes: {},
        exposes: {
          './HelloWorld': './src/components/HelloWorld.vue'
        },
        // 建议补充共享配置,避免多Vue实例冲突
        shared: {
          vue: {
            singleton: true,
            requiredVersion: require('./package.json').dependencies.vue
          }
        }
      })
    ]
  }
}

方案2:动态设置publicPath

如果不方便写死配置,也可以在组件提供方的入口文件src/main.js的最顶部添加以下代码:

/* eslint-disable no-undef */
__webpack_public_path__ = process.env.NODE_ENV === 'development' ? 'http://localhost:8001/' : '/你的生产环境部署路径/'

配置修改完成后重启两个项目,远程组件就会从8001端口正常加载了。

内容的提问来源于stack exchange,提问作者looper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 10:48:04