Files
admin-web/vite.config.ts
T

59 lines
1.8 KiB
TypeScript

import { fileURLToPath, URL } from 'node:url'
import { defineConfig, loadEnv } from 'vite'
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'
export default defineConfig(({ mode }) => {
const env = loadEnv(mode, process.cwd(), '')
const proxyTarget = process.env.API_PROXY_TARGET || env.API_PROXY_TARGET || 'http://localhost:9000'
// 静态资源基址:CI 构建时注入 VITE_CDN_BASE(= CDN 域名 + 版本路径,如
// https://<cdn-domain>/<version>/dist/),使打包出的 index.html 中 JS/CSS
// 引用变为 CDN 绝对 URL,实现「nginx 发 index 外壳、静态走 CDN」。
// 未注入时回退到 '/'(本地 dev 与无 CDN 兜底,行为与原来一致)。
const cdnBase = process.env.VITE_CDN_BASE || env.VITE_CDN_BASE || '/'
return {
base: cdnBase,
plugins: [
vue(),
AutoImport({
resolvers: [ElementPlusResolver()],
dts: 'src/auto-imports.d.ts',
}),
Components({
resolvers: [
name => name === 'ElSelect' ? {
name: 'AdminSelect',
from: '@/shared/components/AdminSelect',
sideEffects: 'element-plus/es/components/select/style/css',
} : undefined,
ElementPlusResolver(),
],
dts: 'src/components.d.ts',
}),
],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url)),
},
},
server: {
strictPort: true,
proxy: {
'/api': {
target: proxyTarget,
changeOrigin: true,
configure(proxy) {
proxy.on('proxyReq', (proxyRequest) => {
proxyRequest.removeHeader('origin')
})
},
},
},
},
}
})