| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- import { defineConfig, loadEnv } from 'vite'
- import vue from '@vitejs/plugin-vue'
- import { resolve } from 'path'
- // https://vitejs.dev/config/
- export default defineConfig(({ command, mode }) => {
- // 加载环境变量
- const env = loadEnv(mode, process.cwd(), '')
-
- // 根据模式设置不同的配置
- const isDev = mode === 'dev'
- const isTest = mode === 'test'
- const isProd = mode === 'prod'
-
- return {
- plugins: [vue()],
- resolve: {
- alias: {
- '@': resolve(__dirname, 'src'),
- },
- },
- server: {
- port: isDev ? 3000 : isTest ? 3001 : 3002,
- host: true,
- open: true, // 自动打开浏览器
- proxy: {
- '/api': {
- target: env.VITE_API_BASE_URL || 'http://localhost:8000',
- changeOrigin: true,
- },
- '/oauth': {
- target: env.VITE_API_BASE_URL || 'http://localhost:8000',
- changeOrigin: true,
- },
- },
- },
- build: {
- outDir: `dist-${mode}`, // 不同环境输出到不同目录
- sourcemap: isDev || isTest, // 开发和测试环境生成 sourcemap
- minify: isProd ? 'terser' : false, // 生产环境压缩
- rollupOptions: {
- output: {
- // 根据环境设置不同的文件名
- entryFileNames: `assets/[name]-${mode}.[hash].js`,
- chunkFileNames: `assets/[name]-${mode}.[hash].js`,
- assetFileNames: `assets/[name]-${mode}.[hash].[ext]`,
- manualChunks: {
- vue: ['vue', 'vue-router', 'pinia'],
- element: ['element-plus', '@element-plus/icons-vue'],
- utils: ['axios', 'js-cookie', 'dayjs'],
- },
- },
- },
- // 生产环境优化
- ...(isProd && {
- terserOptions: {
- compress: {
- drop_console: true, // 移除 console
- drop_debugger: true, // 移除 debugger
- },
- },
- }),
- },
- define: {
- // 注入环境变量到代码中
- __APP_ENV__: JSON.stringify(mode),
- __BUILD_TIME__: JSON.stringify(new Date().toISOString()),
- },
- css: {
- preprocessorOptions: {
- scss: {
- additionalData: `@import "@/styles/variables.scss";`,
- },
- },
- },
- }
- })
|