snack-mall/admin-snack/vite.config.ts

94 lines
3.0 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, 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 自动注入组件 CSSmain.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']
}
}
}
}
}
})