vite.config.ts 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import { defineConfig, loadEnv } from 'vite'
  2. import vue from '@vitejs/plugin-vue'
  3. import { resolve } from 'path'
  4. // https://vitejs.dev/config/
  5. export default defineConfig(({ command, mode }) => {
  6. // 加载环境变量
  7. const env = loadEnv(mode, process.cwd(), '')
  8. // 根据模式设置不同的配置
  9. const isDevLocal = mode === 'dev-local'
  10. const isDev = mode === 'dev'
  11. const isTest = mode === 'test'
  12. const isProd = mode === 'prod'
  13. return {
  14. plugins: [vue()],
  15. resolve: {
  16. alias: {
  17. '@': resolve(__dirname, 'src'),
  18. },
  19. },
  20. server: {
  21. port: isDevLocal || isDev ? 3000 : isTest ? 3001 : 3002,
  22. host: true,
  23. open: true, // 自动打开浏览器
  24. proxy: {
  25. '/api': {
  26. target: env.VITE_API_BASE_URL || 'http://localhost:8000',
  27. changeOrigin: true,
  28. },
  29. '/oauth': {
  30. target: env.VITE_API_BASE_URL || 'http://localhost:8000',
  31. changeOrigin: true,
  32. },
  33. },
  34. },
  35. build: {
  36. outDir: `dist-${mode}`, // 不同环境输出到不同目录
  37. sourcemap: isDevLocal || isDev || isTest, // 开发和测试环境生成 sourcemap
  38. minify: isProd ? 'terser' : false, // 生产环境压缩
  39. rollupOptions: {
  40. output: {
  41. // 根据环境设置不同的文件名
  42. entryFileNames: `assets/[name]-${mode}.[hash].js`,
  43. chunkFileNames: `assets/[name]-${mode}.[hash].js`,
  44. assetFileNames: `assets/[name]-${mode}.[hash].[ext]`,
  45. manualChunks: {
  46. vue: ['vue', 'vue-router', 'pinia'],
  47. element: ['element-plus', '@element-plus/icons-vue'],
  48. utils: ['axios', 'js-cookie', 'dayjs'],
  49. },
  50. },
  51. },
  52. // 生产环境优化
  53. ...(isProd && {
  54. terserOptions: {
  55. compress: {
  56. drop_console: true, // 移除 console
  57. drop_debugger: true, // 移除 debugger
  58. },
  59. },
  60. }),
  61. },
  62. define: {
  63. // 注入环境变量到代码中
  64. __APP_ENV__: JSON.stringify(mode),
  65. __BUILD_TIME__: JSON.stringify(new Date().toISOString()),
  66. },
  67. css: {
  68. preprocessorOptions: {
  69. scss: {
  70. additionalData: `@import "@/styles/variables.scss";`,
  71. },
  72. },
  73. },
  74. }
  75. })