| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- import {fileURLToPath, URL} from 'node:url'
- import type {ProxyOptions} from 'vite'
- import {defineConfig, loadEnv} from 'vite'
- import vue from '@vitejs/plugin-vue'
- import vueJsx from '@vitejs/plugin-vue-jsx'
- import DefineOptions from 'unplugin-vue-define-options/vite'
- import path from 'path'
- import {createHtmlPlugin} from 'vite-plugin-html'
- import fs from 'fs'
- // import vueDevTools from 'vite-plugin-vue-devtools'
- const envDir = './env'
- // 自定义插件:重命名入口文件
- const renameHtmlPlugin = (outDir: string, entry: string) => {
- return {
- name: 'rename-html',
- closeBundle: () => {
- const buildDir = path.resolve(__dirname, outDir)
- const oldFile = path.join(buildDir, entry)
- const newFile = path.join(buildDir, 'index.html')
- // 检查文件是否存在
- if (fs.existsSync(oldFile)) {
- // 删除已存在的 index.html
- if (fs.existsSync(newFile)) {
- fs.unlinkSync(newFile)
- }
- // 重命名文件
- fs.renameSync(oldFile, newFile)
- }
- },
- }
- }
- // https://vite.dev/config/
- export default defineConfig((conf: any) => {
- const mode = conf.mode
- const ENV = loadEnv(mode, envDir)
- const proxyConf: Record<string, string | ProxyOptions> = {}
- proxyConf['/admin/api'] = {
- target: 'http://127.0.0.1:8080',
- changeOrigin: true,
- }
- proxyConf['/chat/api'] = {
- target: 'http://127.0.0.1:8080',
- changeOrigin: true,
- }
- proxyConf['/doc'] = {
- target: 'http://127.0.0.1:8080',
- changeOrigin: true,
- rewrite: (path: string) => path.replace(ENV.VITE_BASE_PATH, '/'),
- }
- proxyConf['/schema'] = {
- target: 'http://127.0.0.1:8080',
- changeOrigin: true,
- rewrite: (path: string) => path.replace(ENV.VITE_BASE_PATH, '/'),
- }
- proxyConf['/static'] = {
- target: 'http://127.0.0.1:8080',
- changeOrigin: true,
- rewrite: (path: string) => path.replace(ENV.VITE_BASE_PATH, '/'),
- }
- // 前端静态资源转发到本身
- proxyConf[`^${ENV.VITE_BASE_PATH}.+\/oss\/file\/.*$`] = {
- target: `http://127.0.0.1:8080`,
- changeOrigin: true,
- }
- // 前端静态资源转发到本身
- proxyConf[`^${ENV.VITE_BASE_PATH}oss\/file\/.*$`] = {
- target: `http://127.0.0.1:8080`,
- changeOrigin: true,
- }
- proxyConf[`^${ENV.VITE_BASE_PATH}oss\/get_url\/.*$`] = {
- target: `http://127.0.0.1:8080`,
- changeOrigin: true,
- }
- // 前端静态资源转发到本身
- proxyConf[ENV.VITE_BASE_PATH] = {
- target: `http://127.0.0.1:${ENV.VITE_APP_PORT}`,
- changeOrigin: true,
- rewrite: (path: string) => path.replace(ENV.VITE_BASE_PATH, '/'),
- }
- // 代理 /chat 到 3001 端口
- if (mode !== 'chat') {
- proxyConf['/chat'] = {
- target: 'http://127.0.0.1:3001',
- changeOrigin: true,
- // 避免代理后端的 API
- bypass: (req: any) => {
- if (req.url && req.url.startsWith('/chat/api')) {
- return req.url
- }
- }
- }
- }
- return {
- preflight: false,
- lintOnSave: false,
- base: './',
- envDir: envDir,
- plugins: [
- vue(),
- vueJsx(),
- DefineOptions(),
- createHtmlPlugin({template: ENV.VITE_ENTRY}),
- renameHtmlPlugin(`dist${ENV.VITE_BASE_PATH}`, ENV.VITE_ENTRY),
- ],
- server: {
- cors: true,
- host: '0.0.0.0',
- port: Number(ENV.VITE_APP_PORT),
- strictPort: true,
- proxy: proxyConf,
- },
- build: {
- outDir: `dist${ENV.VITE_BASE_PATH}`,
- target: 'es2022',
- rollupOptions: {
- input: ENV.VITE_ENTRY,
- },
- },
- resolve: {
- alias: {
- '@': fileURLToPath(new URL('./src', import.meta.url)),
- },
- },
- }
- })
|