vite 联邦配置

171 阅读1分钟
import { defineConfig, loadEnv } from "vite";
import vue from "@vitejs/plugin-vue2";
import federation from "@originjs/vite-plugin-federation";
import topLevelAwait from "vite-plugin-top-level-await";

// https://vitejs.dev/config/
export default defineConfig(({ mode }) => {
  const PROCESS_CONSTAINT = loadEnv(mode, process.cwd());
  const VITE_PUBLIC_PATH = PROCESS_CONSTAINT.VITE_BASE_PREFIX;
  return {
    base: VITE_PUBLIC_PATH || "/",
    resolve: {
      alias: {
        "@": "/src",
      },
    },
    plugins: [
      vue(),
      federation({
        name: "app1",
        remotes: {
          app2: "/federation/lianban2/assets/lianban2.js",
        },
      }),

      topLevelAwait({
        // The export name of top-level await promise for each chunk module
        promiseExportName: "__tla",
        // The function to generate import names of top-level await promise in each chunk module
        promiseImportName: (i) => `__tla_${i}`,
      }),
    ],
    server: {
      host: "",
      force: true,
      port: 89,
      proxy: {
        // 选项写法
        "/api": {
          target: "http://apidev.szqerp.com/", // 代理的目标地址
          // target: 'http://api.szqerp.com/', // 代理的目标地址
          changeOrigin: true, // 开发模式,默认的origin是真实的 origin:lo
          rewrite: (path) => path.replace(/^\/api/, ""),
        },
        "/federation/lianban2": {
          target: "http://localhost:8080/", // 代理的目标地址
          changeOrigin: true, // 开发模式,默认的origin是真实的 origin:lo
          rewrite: (path) => path.replace("/federation/lianban2", ""),
        },
      },
    },
    build: {
      target: "es20",
      brotliSize: false,
      chunkSizeWarningLimit: 2000,

      minify: false,
      cssCodeSplit: true,
      rollupOptions: {
        // input: {
        // 	""
        // },
        output: {
          manualChunks(id) {
            // console.log('manualChunks id', id);
            if (id.includes("/vue@")) {
              return "vue";
            } else if (id.includes("/vue-router")) {
              return "VueRouter";
            } else if (id.includes("element-ui/lib/")) {
              return "chunk-element-ui";
            } else if (id.includes("@base/svg-icon")) {
              return "lib_svgIcon";
            } else if (id.includes("node_modules")) {
              // console.log(id.toString().split("node_modules/")[1].split("/"))
              // console.log(id.toString().split("node_modules/")[1].split("/")[1].toString())
              return id
                .toString()
                .split("node_modules/")[1]
                .split("/")[1]
                .toString();
            }
          },
        },
      },
    },
  };
});