Files
it/frontend/vite.config.js
XCool f25b0307db
Some checks failed
CI/CD Pipeline / 测试 (18.x) (push) Has been cancelled
CI/CD Pipeline / 测试 (20.x) (push) Has been cancelled
CI/CD Pipeline / 安全检查 (push) Has been cancelled
CI/CD Pipeline / 部署 (push) Has been cancelled
CI/CD Pipeline / 通知 (push) Has been cancelled
初始化
2025-11-03 19:47:36 +08:00

133 lines
3.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
import { visualizer } from 'rollup-plugin-visualizer'
export default defineConfig({
plugins: [
vue(),
// 打包体积分析插件
visualizer({
open: false,
gzipSize: true,
brotliSize: true,
filename: 'dist/stats.html'
})
],
resolve: {
alias: {
'@': path.resolve(__dirname, './src')
}
},
build: {
// 启用代码分割
rollupOptions: {
output: {
// 手动分割代码
manualChunks(id) {
// 将node_modules中的依赖分组
if (id.includes('node_modules')) {
// Element Plus
if (id.includes('element-plus')) {
return 'element-plus'
}
// Vue生态系统
if (id.includes('vue') || id.includes('pinia') || id.includes('vue-router')) {
return 'vue-vendor'
}
// 图表库
if (id.includes('echarts')) {
return 'charts'
}
// 工具库
if (id.includes('axios') || id.includes('dayjs') || id.includes('lodash-es')) {
return 'utils'
}
// 其他第三方库
return 'vendor'
}
// 将业务代码按模块分组
if (id.includes('src/views')) {
return 'views'
}
if (id.includes('src/components')) {
return 'components'
}
if (id.includes('src/stores')) {
return 'stores'
}
if (id.includes('src/utils')) {
return 'utils'
}
if (id.includes('src/services')) {
return 'services'
}
},
// 优化chunk命名
chunkFileNames: (chunkInfo) => {
// 根据模块类型生成不同的文件名
const facadeModuleId = chunkInfo.facadeModuleId ? chunkInfo.facadeModuleId.split('/').pop() : 'chunk'
return `js/[name]-[hash].js`
}
}
},
// 启用源码映射
sourcemap: false,
// 代码压缩
minify: 'terser',
terserOptions: {
compress: {
// 移除console
drop_console: true,
// 移除debugger
drop_debugger: true
}
},
// 启用CSS代码分割
cssCodeSplit: true,
// 优化chunk大小警告限制
chunkSizeWarningLimit: 1000,
// 设置输出目录
outDir: 'dist',
// 设置静态资源目录
assetsDir: 'assets',
// 优化资源内联阈值小于此值的资源将内联为base64
assetsInlineLimit: 4096,
// 启用CSS模块化
cssTarget: 'chrome61',
// 设置最大并行请求数
maxParallelFileOps: 5
},
server: {
port: 3000,
proxy: {
'/api': {
target: 'http://localhost:5034',
changeOrigin: true
}
}
},
// 优化依赖预构建
optimizeDeps: {
include: [
'vue',
'vue-router',
'pinia',
'axios',
'element-plus',
'element-plus/es/components/message/style/css',
'element-plus/es/components/notification/style/css',
'element-plus/es/components/message-box/style/css'
]
},
// PWA配置
define: {
__VUE_OPTIONS_API__: false,
__VUE_PROD_DEVTOOLS__: false
},
// 确保Service Worker文件被正确复制
publicDir: 'public',
// 确保manifest.json被正确处理
assetsInclude: ['**/*.svg', '**/*.png', '**/*.jpg', '**/*.jpeg', '**/*.gif', '**/*.webp']
})