import { fileURLToPath, URL } from 'node:url' import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import vueDevTools from 'vite-plugin-vue-devtools' // 自动导入插件 import AutoImport from 'unplugin-auto-import/vite' import Components from 'unplugin-vue-components/vite' // Element Plus 组件自动导入 import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' // https://vite.dev/config/ export default defineConfig(({ mode }) => { return { plugins: [ vue(), vueDevTools(), //自动导入Vue/路由/Pinia等API(无需手动import) AutoImport({ // 适配Element Plus的自动导入 resolvers: [ ElementPlusResolver(), ], // 指定要自动导入的库 imports: [ 'vue', // 自动导入ref、reactive、watch等Vue API 'vue-router', // 自动导入useRoute、useRouter等路由API 'pinia', // 自动导入defineStore等Pinia API '@vueuse/core', // 自动导入@vueuse的hooks ], // 生成类型声明文件(TypeScript必备,解决类型提示问题) dts: 'src/auto-imports.d.ts', // 自动生成eslint配置(解决eslint报"未定义变量"的问题) eslintrc: { enabled: true, // 开启后会生成 .eslintrc-auto-import.json }, }), // 2. 自动导入组件(包括Element Plus和本地组件) Components({ // 自动解析Element Plus组件 resolvers: [ ElementPlusResolver(), ], // 生成组件类型声明文件 dts: 'src/components.d.ts', // 指定要自动导入的本地组件目录(src/components下的组件无需手动注册) dirs: ['src/components'], }), ], resolve: { alias: { '@': fileURLToPath(new URL('./src', import.meta.url)), }, }, // 构建配置 build: { // 输出目录 outDir: 'dist', // 静态资源目录 assetsDir: 'assets', // 生产环境移除console和debugger minify: 'esbuild', esbuild: { drop: mode === 'production' ? ['console', 'debugger'] : [], // 剔除 JS 中的所有注释(包括注释掉的代码) minifyIdentifiers: true, // 压缩变量名 minifySyntax: true, // 压缩语法(含剔除普通注释) minifyWhitespace: true, // 剔除空格 }, // 可选:进一步压缩打包产物 // terserOptions: mode === 'production' ? { // format: { // comments: false, // 彻底剔除所有注释 // }, // } : {}, }, } })