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.
		
		
		
		
			
				
					89 lines
				
				5.5 KiB
			
		
		
			
		
	
	
					89 lines
				
				5.5 KiB
			| 
											6 months ago
										 | /** | ||
|  |  * 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 routesJson = fs.readFileSync('./src/routes/routes.json', 'utf8'); | ||
|  | const routes = Json5.parse(routesJson); | ||
|  | const mfExposes = {}; | ||
|  | for (const route of routes) { | ||
|  |   mfExposes[route.component] = route.componentPath; | ||
|  | } | ||
|  | 
 | ||
|  | // 读取远程组件配置, 通过其中 component 和 componentPath 两个属性构建 webpack 模块联邦的 exposes 属性值 | ||
|  | const remoteComponentsJson = fs.readFileSync('./src/remote-components/remote-components.json', 'utf8'); | ||
|  | const remoteComponents = Json5.parse(remoteComponentsJson); | ||
|  | for (const remoteComponent of remoteComponents) { | ||
|  |   mfExposes[remoteComponent.component] = remoteComponent.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 }, | ||
|  |         '@quasar/quasar-ui-qmarkdown': { requiredVersion: deps['@quasar/quasar-ui-qmarkdown'], 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 }, | ||
|  |       }, | ||
|  |     }), | ||
|  |   ], | ||
|  | }; |