vite 联邦 remote 端

124 阅读1分钟
import {
  defineConfig,
  loadEnv,
  splitVendorChunkPlugin,
  splitVendorChunk,
} from "vite";
import vue from "@vitejs/plugin-vue2";
import { join } from "path";
import { writeFileSync } from "fs";
import path from "path";
import resolveExternalsPlugin from "vite-plugin-resolve-externals";
import externalGlobals from "rollup-plugin-external-globals";
import federation from "@originjs/vite-plugin-federation";

// 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: "app2",
        filename: "lianban2-legacy.js",
        library: {
          module: true,
        },
        exposes: {
          "./lianban2": "./src/lianban2.vue",
        },
      }),
    ],
    server: {
      host: "",
      force: true,
      port: 90,
      proxy: {
        // 选项写法
        "/api": {
          target: "http://apidev.szqerp.com/", // 代理的目标地址
          // target: 'http://api.szqerp.com/', // 代理的目标地址
          changeOrigin: true, // 开发模式,默认的origin是真实的 origin:lo
          rewrite: (path) => path.replace(/^\/api/, ""),
        },
      },
    },
    build: {
      target: "esnext",
      minify: false,
      cssCodeSplit: true,
      rollupOptions: {
        input: {},
        output: {
          manualChunks(id) {
            // console.log('manualChunks id', id);
            writeContent(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();
            }
          },
        },
      },
    },
  };
});

const os = require("os");
const fs = require("fs");

function writeContent(content) {
  fs.appendFile(
    "./node_modules/chunknames.txt",
    content + "\n" + os.EOL,
    () => {}
  );
}