Files
as-partner-frontend/vite.config.ts
2026-07-26 12:54:46 +08:00

146 lines
4.9 KiB
TypeScript
Executable File
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 AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import vue from '@vitejs/plugin-vue'
import path from 'path'
import UnoCSS from '@unocss/vite'
export default defineConfig(({ mode }) => {
const envDir = process.cwd()
const env = loadEnv(mode, envDir, '')
const devPort = Number(env.VITE_DEV_PORT) || 3000
const proxyTarget = (env.VITE_APP_PROXY_TARGET || 'http://172.16.100.134:8083').trim()
const manageProxyTarget = (env.VITE_MANAGE_PROXY_TARGET || 'http://127.0.0.1:8084').trim()
return {
base: './',
plugins: [
vue({
vapor: true
}),
AutoImport({
resolvers: [ElementPlusResolver({ importStyle: 'css' })],
}),
Components({
resolvers: [ElementPlusResolver({ importStyle: 'css' })],
}),
UnoCSS()
],
envPrefix: ['VITE_'],
server: {
host: '0.0.0.0',
port: devPort,
proxy: {
// /api/manage/* → manage 后端(端口 8084),须在 /api 之前匹配
'/api/manage': {
target: manageProxyTarget,
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, ''),
configure: (proxy) => {
proxy.on('proxyReq', (proxyReq) => {
proxyReq.removeHeader('Cookie')
})
proxy.on('proxyRes', (proxyRes) => {
delete proxyRes.headers['set-cookie']
})
}
},
// /api/sys/* → manage 后端(端口 8084),账号体系已迁移
'/api/sys': {
target: manageProxyTarget,
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, ''),
configure: (proxy) => {
proxy.on('proxyReq', (proxyReq) => {
proxyReq.removeHeader('Cookie')
})
proxy.on('proxyRes', (proxyRes) => {
delete proxyRes.headers['set-cookie']
})
}
},
// /api/captcha.jpg → manage 后端(端口 8084),验证码
'/api/captcha.jpg': {
target: manageProxyTarget,
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, ''),
configure: (proxy) => {
proxy.on('proxyReq', (proxyReq) => {
proxyReq.removeHeader('Cookie')
})
proxy.on('proxyRes', (proxyRes) => {
delete proxyRes.headers['set-cookie']
})
}
},
// /api/openapi/* → manage 后端(端口 8084),天卡池/订单/权益
'/api/openapi': {
target: manageProxyTarget,
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, ''),
configure: (proxy) => {
proxy.on('proxyReq', (proxyReq) => {
proxyReq.removeHeader('Cookie')
})
proxy.on('proxyRes', (proxyRes) => {
delete proxyRes.headers['set-cookie']
})
}
},
// /api/* → 原 sys 后端(端口 8083)
// 所有 /api 接口都走代理,baseApi=/api 时全部请求同源转发
// 仅使用 Authorization 头认证,Cookie 不携带/不接收敏感信息
'/api': {
target: proxyTarget,
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, ''),
configure: (proxy) => {
proxy.on('proxyReq', (proxyReq) => {
proxyReq.removeHeader('Cookie')
})
proxy.on('proxyRes', (proxyRes) => {
delete proxyRes.headers['set-cookie']
})
}
}
}
},
resolve: {
alias: {
'@': path.resolve(__dirname, 'src'),
'@assets': path.resolve(__dirname, 'src/assets'),
'components': path.resolve(__dirname, 'src/components')
}
},
css: {
preprocessorOptions: {
scss: { api: 'modern-compiler' },
}
},
build: {
target: 'baseline-widely-available',
minify: 'oxc',
cssCodeSplit: true,
rolldownOptions: {
treeshake: true,
output: {
manualChunks: (id) => {
if (id.includes('node_modules')) {
if (id.includes('element-plus') && !id.includes('icons-vue')) return 'element-plus'
if (id.includes('@element-plus/icons-vue')) return 'element-plus-icons'
if (id.includes('vue') || id.includes('vue-router') || id.includes('pinia')) return 'vue-vendor'
if (id.includes('xlsx')) return 'xlsx'
if (id.includes('element-china-area-data')) return 'region-data'
return 'vendor'
}
},
chunkFileNames: 'js/[name]-[hash].js',
entryFileNames: 'js/[name]-[hash].js',
assetFileNames: '[ext]/[name]-[hash].[ext]'
}
},
chunkSizeWarningLimit: 600
}
}
})