import { defineConfig, loadEnv, ConfigEnv, UserConfig } from "vite"; import { createSvgIconsPlugin } from "vite-plugin-svg-icons"; import vue from "@vitejs/plugin-vue"; import path from "path"; // 处理env环境参数读取 import { wrapperEnv } from "./build/getEnv"; import { createProxy } from "./build/proxy"; // 导入 import vueJsx from "@vitejs/plugin-vue-jsx"; import AutoImport from "unplugin-auto-import/vite"; import Components from "unplugin-vue-components/vite"; import { ElementPlusResolver } from "unplugin-vue-components/resolvers"; export default defineConfig(({ mode }: ConfigEnv): UserConfig => { const root = process.cwd(); const env = loadEnv(mode, root); const viteEnv = wrapperEnv(env); return { plugins: [ vue(), vueJsx(), // svg图标配置,可以使用svg图标 createSvgIconsPlugin({ iconDirs: [path.resolve(process.cwd(), "src/assets/icons")], symbolId: "icon-[dir]-[name]", }), AutoImport({ // 自动导入 Vue 相关函数,如:ref, reactive, toRef 等 imports: ["vue", "@vueuse/core", "pinia", "vue-router", "vue-i18n"], resolvers: [ // 自动导入 Element Plus 相关函数,如:ElMessage, ElMessageBox... (带样式) ElementPlusResolver({ importStyle: "sass", }), ], eslintrc: { // 是否自动生成 eslint 规则,建议生成之后设置 false enabled: false, // 指定自动导入函数 eslint 规则的文件 filepath: "./.eslintrc-auto-import.json", globalsPropValue: true, }, // 是否在 vue 模板中自动导入 vueTemplate: true, // 指定自动导入函数TS类型声明文件路径 (false:关闭自动生成) dts: false, // dts: "src/types/auto-imports.d.ts", }), Components({ resolvers: [ // 自动导入 Element Plus 组件 ElementPlusResolver({ importStyle: "sass", }), ], // 指定自定义组件位置(默认:src/components) dirs: ["src/components", "src/**/components"], // 指定自动导入组件TS类型声明文件路径 (false:关闭自动生成) dts: false, // dts: "src/types/components.d.ts", }), ], // 基础配置 base: viteEnv.VITE_PUBLIC_PATH, root, publicDir: "public", resolve: { alias: { "@": path.resolve(__dirname, "src"), "vue-i18n": "vue-i18n/dist/vue-i18n.cjs.js", }, }, css: { preprocessorOptions: { scss: { prependData: `@import "@/styles/var.scss";`, }, }, }, build: { outDir: "dist", assetsDir: "assets", assetsInlineLimit: 4096, cssCodeSplit: true, sourcemap: false, minify: "terser", terserOptions: { compress: { // 生产环境去除console及debug drop_console: false, drop_debugger: true, }, }, }, server: { host: "0.0.0.0", port: viteEnv.VITE_PORT, open: viteEnv.VITE_OPEN, cors: true, proxy: createProxy(viteEnv.VITE_PROXY), }, }; });