import { defineConfig, loadEnv, UserConfigExport } from "vite";
import vueJsx from "@vitejs/plugin-vue-jsx";
import vue from "@vitejs/plugin-vue";
import * as path from "path";

const pathSrc = path.resolve(__dirname, "src");

// https://vitejs.dev/config/
// loadEnv对应加装环境中的变量
export default ({ mode }): UserConfigExport => {
  // 我要加载哪一个环境的文件process.cwd()
  const env: Record<string, string> = loadEnv(mode, process.cwd(), "");
  return defineConfig({
    define: {
      __APP_ENV__: JSON.stringify(env),
    },
    base: "/",
    plugins: [vue(), vueJsx()],
    server: {
      host: "0.0.0.0",
      port: env["VITE_APP_PORT"] as unknown as number,
      open: false,
      proxy: {
        [env["VITE_APP_BASE_API"]]: {
          target: env["VITE_APP_PROXY_URL"],
          changeOrigin: true,
          secure: false,
          rewrite: (path) =>
            path.replace(RegExp(`^${env["VITE_APP_BASE_API"]}`), ""),
        },
      },
    },
    build: {
      outDir: "dist",
      target: "modules",
      chunkSizeWarningLimit: 1500,
      minify: "terser",
      terserOptions: {
        compress: {
          //生产环境时移除console
          drop_console: env["VITE_DROP_CONSOLE"] as unknown as boolean,
          drop_debugger: env["VITE_DROP_CONSOLE"] as unknown as boolean,
        },
      },
      rollupOptions: {
        output: {
          manualChunks(id) {
            if (id.includes("node_modules")) {
              return id
                .toString()
                .split("node_modules/")[1]
                .split("/")[0]
                .toString();
            }
          },
          chunkFileNames(chunkInfo) {
            const facadeModuleId = chunkInfo.facadeModuleId
              ? chunkInfo.facadeModuleId.split("/")
              : [];
            const fileName =
              facadeModuleId[facadeModuleId.length - 2] || "[name]";
            return `js/${fileName}/[name].[hash].js`;
          },
        },
      },
    },
    resolve: {
      alias: {
        "@": pathSrc,
      },
    },
    css: {
      preprocessorOptions: {
        scss: {
          charset: false,
          // 全局css变量
          additionalData: `
                    @import "@/assets/scss/variable.scss";
                    @import "@/assets/scss/mixin.scss";
                    `,
        },
      },
    },
  });
};
