import path from 'node:path'; import vue from '@vitejs/plugin-vue'; import { visualizer } from 'rollup-plugin-visualizer'; import { defineConfig, loadEnv } from 'vite'; import mkcert from 'vite-plugin-mkcert'; export default defineConfig(({ mode }) => { const env = loadEnv(mode, process.cwd(), ['VITE_']); const isDev = env.VITE_NODE_ENV === 'development'; const isAnalyze = env.VITE_NODE_ENV === 'analyze'; return { // 服务器配置 server: isDev ? { port: Number(env.VITE_PORT), // cors: true, } : undefined, // 插件配置 plugins: [ vue(), isDev && mkcert(), // 添加打包分析插件 isAnalyze && visualizer({ filename: 'stats.html', // 分析图生成的文件名 open: true, // 打包完成后自动打开浏览器 gzipSize: true, // 显示gzip后的大小 brotliSize: true, // 显示brotli压缩后的大小 stat: true, // 显示包的状态信息 }), ].filter(Boolean), // 解析配置 resolve: { alias: { '@': path.resolve(process.cwd(), 'src'), $vtj: path.resolve(process.cwd(), '.vtj'), }, }, // 定义全局变量 define: { 'process.env': JSON.stringify(env), }, // 打包配置 build: { rollupOptions: { output: { // 可选:对代码进行分块 manualChunks: { vendor: ['vue', 'vue-router', 'core-js'], 'element-plus': ['element-plus'], icon: ['@vtj/icons'], chart: ['@vtj/charts'], utils: ['@vtj/utils'], fetch: ['axios', '@tanstack/vue-query'], sentry: ['@sentry/vue'], // 低代码引擎的内容打包到一块 'low-code-engine': [ '@vtj/core', // 物料手动拆分会报错,绕过它 // '@vtj/materials', '@vtj/pro', '@vtj/renderer', '@vtj/ui', '@vtj/web', ], }, }, }, }, }; });