vite.config.ts 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. },
  30. },
  31. build: {
  32. outDir: `dist-${mode}`, // 不同环境输出到不同目录
  33. sourcemap: isDevLocal || isDev || isTest, // 开发和测试环境生成 sourcemap
  34. minify: isProd ? 'terser' : false, // 生产环境压缩
  35. rollupOptions: {
  36. output: {
  37. // 根据环境设置不同的文件名
  38. entryFileNames: `assets/[name]-${mode}.[hash].js`,
  39. chunkFileNames: `assets/[name]-${mode}.[hash].js`,
  40. assetFileNames: `assets/[name]-${mode}.[hash].[ext]`,
  41. manualChunks: {
  42. vue: ['vue', 'vue-router', 'pinia'],
  43. element: ['element-plus', '@element-plus/icons-vue'],
  44. utils: ['axios', 'js-cookie', 'dayjs'],
  45. },
  46. },
  47. },
  48. // 生产环境优化
  49. ...(isProd && {
  50. terserOptions: {
  51. compress: {
  52. drop_console: true, // 移除 console
  53. drop_debugger: true, // 移除 debugger
  54. },
  55. },
  56. }),
  57. },
  58. define: {
  59. // 注入环境变量到代码中
  60. __APP_ENV__: JSON.stringify(mode),
  61. __BUILD_TIME__: JSON.stringify(new Date().toISOString()),
  62. },
  63. css: {
  64. preprocessorOptions: {
  65. scss: {
  66. additionalData: `@import "@/styles/variables.scss";`,
  67. },
  68. },
  69. },
  70. }
  71. })