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.
		
		
		
		
		
			
		
			
				
					
					
						
							88 lines
						
					
					
						
							5.5 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							88 lines
						
					
					
						
							5.5 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 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 }, | |
|       }, | |
|     }), | |
|   ], | |
| };
 | |
| 
 |