79 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 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',
 | |
|             ],
 | |
|           },
 | |
|         },
 | |
|       },
 | |
|     },
 | |
|   };
 | |
| });
 | 
