ufutx-pc-website/vite.config.ts

106 lines
3.5 KiB
TypeScript
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' // 引入 path 模块
import viteImagemin from 'vite-plugin-imagemin' // 新插件
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
// 引入 ElementPlus 相关解析器
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import legacy from '@vitejs/plugin-legacy'
export default defineConfig({
plugins: [
vue(),
legacy({
targets: ['ie >= 11'],
additionalLegacyPolyfills: ['regenerator-runtime/runtime'],
modernPolyfills: true // 启用现代浏览器的 polyfill
}),
AutoImport({
imports: ['vue', 'vue-router'], // 自动导入 Vue、Vue Router API
// 自动导入 Vue 相关函数,以及 ElementPlus 的相关函数等
resolvers: [
ElementPlusResolver({
importStyle: 'sass', // 可选:按需导入样式
directives: true, // 导入指令
version: '2.3.6' // 版本号
})
]
}),
Components({
// 自动导入 ElementPlus 的组件
resolvers: [
ElementPlusResolver({
importStyle: 'sass',
directives: true
})
],
dirs: ['src/components'] // 自动扫描组件目录
}),
viteImagemin({
// 基础压缩配置(可根据需求扩展)
gifsicle: { optimizationLevel: 7 },
optipng: { optimizationLevel: 7 },
mozjpeg: { quality: 80 },
pngquant: { quality: [0.8, 0.9] },
svgo: { plugins: [{ name: 'removeViewBox' }] }
})
],
build: {
rollupOptions: {
// external: ['element-plus', 'element-plus/dist/index.css'], // 排除 Element Plus
// external: ['element-plus'], // 排除 Element Plus 从打包中
output: {
manualChunks(id) {
// 只打包实际使用的 Element Plus 组件
// if (id.includes('element-plus/es/components')) {
// const componentName = id.split('element-plus/es/components/')[1].split('/')[0]
// return `element-${componentName}`
// }
if (id.includes('node_modules')) {
// 将第三方库单独分包(如 axios、vue 等)
return id.split('node_modules/')[1].split('/')[0]
}
// 1. 将 Element Plus 整体打包为一个 chunk
// 只分割实际使用的库
// if (id.includes('vue') || id.includes('vue-router') || id.includes('pinia')) {
// return 'vue-vendor'
// }
//
// if (id.includes('axios') || id.includes('nprogress')) {
// return 'utils'
// }
//
// // 不强制分割第三方依赖,让 Vite 自动处理
// if (id.includes('node_modules') && !id.includes('@babel') && !id.includes('@types')) {
// return undefined // 取消手动分割
// }
}
}
}
},
css: {
preprocessorOptions: {
scss: {
// 关键配置:强制 Sass 使用现代 API二选一推荐 modern-compiler
api: 'modern-compiler'
// api: 'modern' // 轻量版,适合简单场景
},
less: {
// 关键配置:自动注入 global.less
additionalData: `@import "@/styles/global.less";`,
// 可选:如果需要自定义 Less 选项
javascriptEnabled: true
}
}
},
resolve: {
alias: {
'@': path.resolve(__dirname, 'src') // 添加路径别名
}
}
})