带有 vue 2.16.12 的 webpack 模块联合和 single-spa-vue 不起作用

Posted

技术标签:

【中文标题】带有 vue 2.16.12 的 webpack 模块联合和 single-spa-vue 不起作用【英文标题】:webpack module federation and single-spa-vue with vue 2.16.12 not working 【发布时间】:2021-07-19 21:58:52 【问题描述】:

我正在使用 single-spa-vue 和 Vue 2.6.12 开发一个微前端,但它根本不工作。

我正在使用 webpack 模块联合插件。

这是我的切入点。

src/app.ts

import singleSpaVue from 'single-spa-vue';
import Vue from 'vue';

import Main from './Main.vue';
import router from './router';

const lifecycles = singleSpaVue(
  Vue,
  appOptions: 
    render(h: any) 
      return h(Main as any);
    ,
    router,
   as any,
);

export const bootstrap = lifecycles.bootstrap;
export const mount = lifecycles.mount;
export const unmount = lifecycles.unmount;

这是我的 webpack.config.js 文件

const ModuleFederationPlugin = require('webpack/lib/container/ModuleFederationPlugin')
const StandaloneSingleSpaPlugin = require('standalone-single-spa-webpack-plugin');
const htmlWebpackPlugin = require('html-webpack-plugin');
const  VueLoaderPlugin  = require('vue-loader')

const path = require('path');
const outputPath = path.resolve(__dirname, 'dist');

module.exports = 
  entry: './src/index',
  cache: false,

  mode: 'development',
  devtool: 'source-map',

  optimization: 
    minimize: false,
  ,

  output: 
    publicPath: 'http://localhost:3002/',
  ,

  resolve: 
    extensions: ['.js', '.ts', '.json', '.vue'],
    alias: 
      '~' : path.resolve(__dirname, 'node_modules')
    
  ,

  devServer: 
    headers: 
      "Access-Control-Allow-Origin": "*",
    ,
    contentBase: outputPath,
    disableHostCheck: true,
    historyApiFallback: true,
  ,

  module: 
    rules: [
      
        test: /\.s[ac]ss$/i,
        use: [
          'vue-style-loader',
          'style-loader',
          'css-loader',
          'sass-loader',
        ],
      ,
      
        test: /\.vue$/,
        loader: 'vue-loader',
      ,
      
        test: /\.js$/,
        loader: 'babel-loader',
      ,
      
        test: /\.ts?$/,
        loader: 'ts-loader',
        options: 
          appendTsSuffixTo: [/\.vue$/],
        ,
        exclude: /node_modules/,
      ,
    ],
  ,

  plugins: [
    new HtmlWebpackPlugin(),
    new StandaloneSingleSpaPlugin(
      // required
      appOrParcelName: "body",
      // optional - strongly encouraged for single-spa applications
      activeWhen: ['/'],
      // optional - defaults to true - turns on or off import-map-overrides.
      importMapOverrides: true,
    ),
    new VueLoaderPlugin(),
    new ModuleFederationPlugin(
      name: 'content',
      library:  type: 'var', name: 'content' ,
      filename: 'remoteEntry.js',
      remotes: 
        content: 'content'
      ,
      exposes: 
        Content: './src/app',
      ,
    ),
  ],

这是我的 index.ts 文件

src/index.ts

import  start, registerApplication  from 'single-spa'

registerApplication(
  name: 'content',
  app: () => import('content/Content' as any),
  activeWhen: '/',
,)

start()

当我运行 yarn start 并转到 localhost:3002 这是错误。

error image

有人可以帮我吗?

谢谢!

【问题讨论】:

【参考方案1】:

嗯,可能是你把主机容器和远程容器的关系混在一起了,我看到你的ModuleFederationPlugin 配置,特殊的remotesname 是一样的,看起来不正确。

【讨论】:

以上是关于带有 vue 2.16.12 的 webpack 模块联合和 single-spa-vue 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

带有 webpack 别名的 Vue-typescript 错误,找不到路径

带有 Vue.js 和 webpack 的 Laravel 6,而不是常规的 Vue

带有 Webpack 模块联合的 Vue 3 CLI:组件从错误的主机加载

带有 SASS 的 Webpack-simple + vue-cli - 无法编译?

带有 webpack 的 Vue.js 不提供压缩的 GZIP .js 文件

在 Vue 上使用带有 Webpack 的 plotly.js 3d scatter3d