95 lines
2.8 KiB
TypeScript
95 lines
2.8 KiB
TypeScript
import { defineConfig } from 'vite'
|
||
import { fileURLToPath, URL } from 'node:url'
|
||
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'
|
||
|
||
// https://vite.dev/config/
|
||
export default defineConfig({
|
||
plugins: [
|
||
vue(),
|
||
// 自动导入 Vue / Vue Router / Pinia 的 API 与 Element Plus 组件
|
||
AutoImport({
|
||
imports: ['vue', 'vue-router', 'pinia'],
|
||
resolvers: [ElementPlusResolver()],
|
||
dts: 'src/types/auto-imports.d.ts',
|
||
eslintrc: { enabled: false },
|
||
}),
|
||
Components({
|
||
resolvers: [ElementPlusResolver()],
|
||
dts: 'src/types/components.d.ts',
|
||
dirs: ['src/components'],
|
||
}),
|
||
],
|
||
resolve: {
|
||
alias: {
|
||
'@': fileURLToPath(new URL('./src', import.meta.url)),
|
||
},
|
||
},
|
||
server: {
|
||
host: '0.0.0.0',
|
||
port: 5173,
|
||
// 开发期把 API 请求代理到 Django 后端,Cookie 认证跨域自动处理
|
||
proxy: {
|
||
'/api': {
|
||
target: 'http://127.0.0.1:8000',
|
||
changeOrigin: true,
|
||
},
|
||
'/API': {
|
||
target: 'http://127.0.0.1:8000',
|
||
changeOrigin: true,
|
||
},
|
||
'/Auth': {
|
||
target: 'http://127.0.0.1:8000',
|
||
changeOrigin: true,
|
||
},
|
||
'/Query': {
|
||
target: 'http://127.0.0.1:8000',
|
||
changeOrigin: true,
|
||
},
|
||
'/Modify': {
|
||
target: 'http://127.0.0.1:8000',
|
||
changeOrigin: true,
|
||
},
|
||
'/static': {
|
||
target: 'http://127.0.0.1:8000',
|
||
changeOrigin: true,
|
||
},
|
||
'/media': {
|
||
target: 'http://127.0.0.1:8000',
|
||
changeOrigin: true,
|
||
},
|
||
},
|
||
},
|
||
build: {
|
||
outDir: 'dist',
|
||
sourcemap: false,
|
||
chunkSizeWarningLimit: 2000,
|
||
// 合并全部 CSS 为单个文件:消灭按需组件产生的零碎 .css 与 css-*.js(可省约 90 个请求)
|
||
cssCodeSplit: false,
|
||
rollupOptions: {
|
||
output: {
|
||
// 归并 node_modules 公共依赖,消灭 0.1-10kB 的细碎 chunk(lodash 工具 / element-plus 小组件等)
|
||
manualChunks(id: string) {
|
||
if (!id.includes('node_modules')) return undefined
|
||
if (id.includes('element-plus') || id.includes('@element-plus')) return 'element-plus'
|
||
if (id.includes('vxe-table')) return 'vxe-table'
|
||
if (id.includes('@formkit') || id.includes('formkit')) return 'formkit'
|
||
if (id.includes('lodash') || id.includes('xe-utils')) return 'utils'
|
||
if (
|
||
id.includes('/node_modules/vue') ||
|
||
id.includes('/node_modules/vue-router') ||
|
||
id.includes('/node_modules/pinia') ||
|
||
id.includes('/node_modules/@vue') ||
|
||
id.includes('/node_modules/@vueuse')
|
||
) {
|
||
return 'vue-vendor'
|
||
}
|
||
return 'vendor'
|
||
},
|
||
},
|
||
},
|
||
},
|
||
})
|