94 lines
3.0 KiB
TypeScript
94 lines
3.0 KiB
TypeScript
import { defineConfig, loadEnv } from 'vite'
|
||
import vue from '@vitejs/plugin-vue'
|
||
import vueJsx from '@vitejs/plugin-vue-jsx'
|
||
import AutoImport from 'unplugin-auto-import/vite'
|
||
import Components from 'unplugin-vue-components/vite'
|
||
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
|
||
import UnoCSS from 'unocss/vite'
|
||
import { fileURLToPath, URL } from 'node:url'
|
||
|
||
// https://vite.dev/config/
|
||
export default defineConfig(({ mode }) => {
|
||
const env = loadEnv(mode, process.cwd())
|
||
|
||
return {
|
||
base: './',
|
||
plugins: [
|
||
vue(),
|
||
vueJsx(),
|
||
AutoImport({
|
||
imports: ['vue', 'vue-router', 'pinia'],
|
||
// 不让 resolver 自动注入组件 CSS:main.ts 已统一 import 'element-plus/dist/index.css'
|
||
// 避免 unplugin-vue-components 在某些版本下生成 element-plus/es/.../style/css(无扩展名)路径报错
|
||
resolvers: [ElementPlusResolver({ importStyle: false })],
|
||
dts: 'src/types/auto-imports.d.ts',
|
||
eslintrc: { enabled: true }
|
||
}),
|
||
Components({
|
||
// 同上:组件 JS 按需引入,但样式由 main.ts 全量引入
|
||
resolvers: [ElementPlusResolver({ importStyle: false })],
|
||
dts: 'src/types/components.d.ts'
|
||
}),
|
||
UnoCSS()
|
||
],
|
||
resolve: {
|
||
alias: {
|
||
'@': fileURLToPath(new URL('./src', import.meta.url))
|
||
}
|
||
},
|
||
css: {
|
||
preprocessorOptions: {
|
||
scss: {
|
||
// 全局注入设计系统变量到每个 .scss / .vue<style lang="scss"> 文件
|
||
// 配合子文件中的 @use "@/styles/variables.scss" as * 一起使用
|
||
additionalData: `@use "@/styles/variables.scss" as *;\n`
|
||
}
|
||
}
|
||
},
|
||
server: {
|
||
host: '0.0.0.0',
|
||
port: 5173,
|
||
open: true,
|
||
cors: true,
|
||
proxy: {
|
||
// /api/** 全部代理到后端
|
||
// - 前端 axios baseURL = '' 时请求路径 = '/api/admin/login' → 浏览器同源,无 CORS
|
||
// - Vite 在 Node 层把请求转给 VITE_API_BASE_URL(默认 http://localhost:8080)
|
||
'/api': {
|
||
target: env.VITE_API_BASE_URL || 'http://localhost:8080',
|
||
changeOrigin: true
|
||
},
|
||
// 上传文件访问
|
||
'/uploads': {
|
||
target: env.VITE_API_BASE_URL || 'http://localhost:8080',
|
||
changeOrigin: true
|
||
},
|
||
// WebSocket 代理(后续客服模块用,握手阶段会带 /ws 前缀)
|
||
'/ws': {
|
||
target: env.VITE_API_BASE_URL || 'http://localhost:8080',
|
||
changeOrigin: true,
|
||
ws: true
|
||
}
|
||
}
|
||
},
|
||
build: {
|
||
target: 'es2020',
|
||
outDir: 'dist',
|
||
assetsDir: 'static',
|
||
sourcemap: false,
|
||
minify: 'esbuild',
|
||
chunkSizeWarningLimit: 1500,
|
||
rollupOptions: {
|
||
output: {
|
||
manualChunks: {
|
||
vue: ['vue', 'vue-router', 'pinia'],
|
||
element: ['element-plus', '@element-plus/icons-vue'],
|
||
echarts: ['echarts', 'vue-echarts'],
|
||
editor: ['wangeditor']
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
})
|