video_nowm/frontend/vite.config.js

86 lines
1.9 KiB
JavaScript

import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import compress from 'vite-plugin-compression'
// https://vite.dev/config/
export default defineConfig((command, mode) => {
const env = loadEnv(mode, process.cwd(), '')
const isDev = mode === 'development'
return {
plugins: [
vue(),
AutoImport({
resolvers: [
ElementPlusResolver({
importStyle: 'css',
}),
],
imports: ['vue'],
dts: 'src/auto-imports.d.ts',
}),
Components({
resolvers: [
ElementPlusResolver({
importStyle: 'css',
}),
],
dts: 'src/components.d.ts',
}),
compress({
verbose: true,
disable: false,
threshold: 10240,
algorithm: 'gzip',
ext: '.gz',
}),
],
server: {
proxy: {
'/api': {
target: 'http://localhost:30001',
changeOrigin: true,
},
},
},
build: {
cssCodeSplit: true,
minify: 'terser',
terserOptions: {
compress: {
drop_console: true,
drop_debugger: true,
},
},
optimizeDeps: {
include: ['vue', 'element-plus', 'axios'],
},
rollupOptions: {
output: {
manualChunks(id) {
// 基础库分包
if (id.includes('node_modules')) {
if (id.includes('element-plus')) {
return 'element-plus'
} else if (id.includes('vue') || id.includes('@vue')) {
return 'vue-vendor'
} else if (id.includes('axios')) {
return 'axios'
}
} else {
return 'vendor'
}
},
// 控制打包文件目录
chunkFileNames: 'assets/js/[name]-[hash].js',
entryFileNames: 'assets/js/[name]-[hash].js',
assetFileNames: 'assets/[ext]/[name]-[hash].[ext]',
},
},
brotliSize: true,
chunkSizeWarningLimit: 500,
},
}
})