81 lines
2.6 KiB
TypeScript
81 lines
2.6 KiB
TypeScript
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, // 彻底剔除所有注释
|
||
// },
|
||
// } : {},
|
||
},
|
||
}
|
||
})
|