99AI/chat/vite.config.ts
2025-05-31 02:28:46 +08:00

89 lines
2.6 KiB
TypeScript

import path from 'path'
import { defineConfig, loadEnv } from 'vite'
import { createVitePlugins } from './vite/plugins'
export default defineConfig(({ mode }) => {
const viteEnv = loadEnv(mode, process.cwd()) as unknown as ImportMetaEnv
const isBuild = mode === 'production'
return {
base: './',
resolve: {
alias: {
'@': path.resolve(__dirname, 'src'),
},
},
plugins: createVitePlugins(isBuild),
server: {
host: '0.0.0.0',
port: 9002,
open: false,
proxy: {
'/api': {
target: viteEnv.VITE_APP_API_BASE_URL,
changeOrigin: true,
rewrite: path => path.replace(/^\/api/, '/api/'),
},
},
},
clearScreen: false,
envPrefix: ['VITE_'],
optimizeDeps: {
include: ['vue', 'vue-router', 'pinia', '@vueuse/core', 'markdown-it', 'highlight.js'],
exclude: ['acorn'],
},
build: {
target: 'es2015',
reportCompressedSize: false,
sourcemap: !isBuild,
minify: isBuild ? 'esbuild' : false,
commonjsOptions: {
ignoreTryCatch: false,
},
outDir: 'dist',
chunkSizeWarningLimit: 1000,
rollupOptions: {
output: {
// 根据文件类型分类存放
assetFileNames: assetInfo => {
const fileName = assetInfo.name || ''
// 图片文件
if (/\.(png|jpe?g|gif|svg|webp|ico)$/i.test(fileName)) {
return `images/[name]-[hash][extname]`
}
// 字体文件
if (/\.(woff2?|eot|ttf|otf)$/i.test(fileName)) {
return `fonts/[name]-[hash][extname]`
}
// CSS文件
if (/\.css$/i.test(fileName)) {
return `css/[name]-[hash][extname]`
}
// 其他文件
return `assets/[name]-[hash][extname]`
},
// JS文件分类
chunkFileNames: 'js/[name]-[hash].js',
entryFileNames: 'js/[name]-[hash].js',
manualChunks: {
// 核心框架
'vue-vendor': ['vue', 'vue-router', 'pinia'],
// 工具库
'utils-vendor': ['@vueuse/core', '@vueuse/integrations'],
// 编辑器相关
'editor-vendor': ['codemirror', 'markdown-it', 'highlight.js'],
// UI组件库
'ui-vendor': ['@icon-park/vue-next'],
// 图表和可视化
'chart-vendor': ['mermaid', 'markmap-lib', 'markmap-view', 'markmap-common'],
},
},
},
},
esbuild: {
drop: isBuild ? ['console', 'debugger'] : [],
},
}
})