/** * 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: { '@codemirror/autocomplete': { requiredVersion: deps['@codemirror/autocomplete'], singleton: true }, '@codemirror/commands': { requiredVersion: deps['@codemirror/commands'], singleton: true }, '@codemirror/lang-html': { requiredVersion: deps['@codemirror/lang-html'], singleton: true }, '@codemirror/lang-java': { requiredVersion: deps['@codemirror/lang-java'], singleton: true }, '@codemirror/lang-javascript': { requiredVersion: deps['@codemirror/lang-javascript'], singleton: true }, '@codemirror/lang-json': { requiredVersion: deps['@codemirror/lang-json'], singleton: true }, '@codemirror/lang-sql': { requiredVersion: deps['@codemirror/lang-sql'], singleton: true }, '@codemirror/lang-xml': { requiredVersion: deps['@codemirror/lang-xml'], singleton: true }, '@codemirror/language': { requiredVersion: deps['@codemirror/language'], singleton: true }, '@codemirror/search': { requiredVersion: deps['@codemirror/search'], singleton: true }, '@codemirror/state': { requiredVersion: deps['@codemirror/state'], singleton: true }, '@codemirror/view': { requiredVersion: deps['@codemirror/view'], singleton: true }, '@maxgraph/core': { requiredVersion: deps['@maxgraph/core'], singleton: true }, '@univerjs/core': { requiredVersion: deps['@univerjs/core'], singleton: true }, '@univerjs/design': { requiredVersion: deps['@univerjs/design'], singleton: true }, '@univerjs/docs': { requiredVersion: deps['@univerjs/docs'], singleton: true }, '@univerjs/docs-ui': { requiredVersion: deps['@univerjs/docs-ui'], singleton: true }, '@univerjs/engine-formula': { requiredVersion: deps['@univerjs/engine-formula'], singleton: true }, '@univerjs/engine-render': { requiredVersion: deps['@univerjs/engine-render'], singleton: true }, '@univerjs/facade': { requiredVersion: deps['@univerjs/facade'], singleton: true }, '@univerjs/sheets': { requiredVersion: deps['@univerjs/sheets'], singleton: true }, '@univerjs/sheets-formula': { requiredVersion: deps['@univerjs/sheets-formula'], singleton: true }, '@univerjs/sheets-ui': { requiredVersion: deps['@univerjs/sheets-ui'], singleton: true }, '@univerjs/thread-comment': { requiredVersion: deps['@univerjs/thread-comment'], singleton: true }, '@univerjs/ui': { requiredVersion: deps['@univerjs/ui'], singleton: true }, '@vueuse/core': { requiredVersion: deps['@vueuse/core'], singleton: true }, 'axios': { requiredVersion: deps['axios'], singleton: true }, 'codemirror': { requiredVersion: deps['codemirror'], 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 }, 'svg-path-commander': { requiredVersion: deps['svg-path-commander'], 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 }, 'xml-formatter': { requiredVersion: deps['xml-formatter'], singleton: true } } }), ] };