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 = 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"; `, }, }, }, }); };