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
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 }
|
|
}
|
|
}),
|
|
]
|
|
};
|
|
|