import path from 'path' import { defineConfig, loadEnv } from 'vite' import vueJsx from '@vue3-oop/plugin-vue-jsx' import federation from '@originjs/vite-plugin-federation'; import { nacosRegVitePlugin } from "nacos-federation"; import { visualizer } from 'rollup-plugin-visualizer'; export default defineConfig(async ({ mode }) => { const env = loadEnv(mode, process.cwd()); // const nacos-cluster = await nacosServiceManage.create({ // serverList: env.VITE_NACOS_ADDRESS, // serviceName: env.VITE_SERVER_NAME, // port: Number(env.VITE_SERVER_PORT) // }); // const productUrl = await nacos-cluster.find(env.VITE_MODEL_PRODUCT_NAME) // const sharedUrl = await nacos-cluster.find(env.VITE_MODEL_SHARED_NAME) return { server: { port: Number(env.VITE_SERVER_PORT), host: '::', strictPort: true, }, plugins: [ nacosRegVitePlugin(), vueJsx(), federation({ name: env.VITE_SERVER_NAME, remotes: { // 【弃用】基于 Nacos 服务发现获取 微前端模块的地址 192.168.31.101:1301 // product: `${ productUrl }/assets/remoteEntry.js`, // shared: `${ sharedUrl }/assets/remoteEntry.js` // 实现:限流与熔断,重试,IP 白名单,压缩等 // 基于 c 网关,由网关去寻找 微前端模块的地址 // 网关的地址是 nodejs脚本 定时10秒访问Nacos api 后,生成Traefik配置文件dynamic.yml, // 并把配置实时同步到Traefik中,如果 xxx微前端模块停止运行那么就会从 Nacos服务中注销, // 那么dynamic.yml配置文件就会自动删减被下线的网关映射 product: `${ env.VITE_PREFIX }${ env.VITE_TRAEFIK_ADDRESS }/${ env.VITE_MODEL_PRODUCT_NAME }/assets/remoteEntry.js`, shared: `${ env.VITE_PREFIX }${ env.VITE_TRAEFIK_ADDRESS }/${ env.VITE_MODEL_SHARED_NAME }/assets/remoteEntry.js` }, shared: { vue: { requiredVersion: '^3.5.18' }, 'vue-router': { requiredVersion: '^4.0.6' }, pinia: { requiredVersion: '^3.0.3' } } }), visualizer({ title: "主应用依赖分析", filename: 'dist/stats.html', // 分析文件输出路径 open: false, // 构建完成后自动打开 gzipSize: true, // 显示gzip后的大小 brotliSize: true, // 显示brotli后的大小 }) ], build: { target: 'esnext', minify: false, cssCodeSplit: true, rollupOptions: { output: { minifyInternalExports: false } } }, resolve: { alias: { '@': path.resolve(__dirname, './src/app/'), '@shared': path.resolve(__dirname, './src/shared/'), '@features': path.resolve(__dirname, './src/features/'), '@domains': path.resolve(__dirname, './src/domains/') }, }, } })