/** * webpack module federation 配置 */ const fs = require('fs'); // 文件读取 const Json5 =require('json5'); // json5 const { ModuleFederationPlugin } = require('webpack').container; // webpack 模块联邦插件 const packageJson = require('./package.json'); // package.json const projectName =packageJson.name; // 项目名称 const deps = packageJson.dependencies; // 项目依赖 // 读取本地路由配置, 通过其中 component 和 componentPath 两个属性构建 webpack 模块联邦的 exposes 属性值 const data = fs.readFileSync('./src/routes/routes.json', 'utf8'); const routes =Json5.parse(data); const mfExposes ={}; for(const route of routes){ mfExposes[route.component]= route.componentPath; } // 导出 webapck 配置的模块联邦部分 module.exports = { plugins: [ new ModuleFederationPlugin({ // 模块联邦的模块名称 name: `${projectName}`, // 模块联邦的远程入口文件 filename: `javascript/remoteEntry.js`, // 通过浏览器 window 对象保存模块联邦对象 library: { type: 'window', name: `${projectName}` }, remoteType: 'window', // 模块联邦的导出组件 exposes: mfExposes, // 模块联邦共享库 shared: { '@vueuse/core': { requiredVersion: deps['@vueuse/core'], singleton: true }, 'axios': { requiredVersion: deps['axios'], singleton: true }, 'dayjs': { requiredVersion: deps['dayjs'], singleton: true }, 'echarts':{ requiredVersion: deps['echarts'], singleton: true }, 'exceljs':{ requiredVersion: deps['exceljs'], singleton: true }, 'file-saver':{ requiredVersion: deps['file-saver'], singleton: true }, 'luckyexcel':{ requiredVersion: deps['luckyexcel'], singleton: true }, "mockjs": { requiredVersion: deps['mockjs'], singleton: true }, 'pinia': { requiredVersion: deps['pinia'], singleton: true }, 'platform-core': { requiredVersion: deps['platform-core'], singleton: true }, 'quasar': { requiredVersion: deps['quasar'], singleton: true }, 'react-dnd-html5-backend':{ requiredVersion: deps['react-dnd-html5-backend'], singleton: true }, 'vue': { requiredVersion: deps['vue'], singleton: true }, 'vue-dompurify-html':{ requiredVersion: deps['vue-dompurify-html'], singleton: true }, 'vue-i18n': { requiredVersion: deps['vue-i18n'], singleton: true }, 'vue-router': { requiredVersion: deps['vue-router'], singleton: true }, 'vue3-dnd':{ requiredVersion: deps['vue3-dnd'], singleton: true }, } }), ] };