You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

78 lines
4.9 KiB

/**
* 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 },
'@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 },
'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['vue-router'], singleton: true },
"@univerjs/core": { requiredVersion: deps['vue-router'], singleton: true },
"@univerjs/design": { requiredVersion: deps['vue-router'], singleton: true },
"@univerjs/docs": { requiredVersion: deps['vue-router'], singleton: true },
"@univerjs/docs-ui": { requiredVersion: deps['vue-router'], singleton: true },
"@univerjs/engine-formula": { requiredVersion: deps['vue-router'], singleton: true },
"@univerjs/engine-render": { requiredVersion: deps['vue-router'], singleton: true },
"@univerjs/facade": { requiredVersion: deps['vue-router'], singleton: true },
"@univerjs/sheets": { requiredVersion: deps['vue-router'], singleton: true },
"@univerjs/sheets-formula": { requiredVersion: deps['vue-router'], singleton: true },
"@univerjs/sheets-ui": { requiredVersion: deps['vue-router'], singleton: true },
"@univerjs/ui": { requiredVersion: deps['vue-router'], singleton: true }
}
}),
]
};