vite.config.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import { fileURLToPath, URL } from 'node:url'
  2. import AutoImport from 'unplugin-auto-import/vite'
  3. import Components from 'unplugin-vue-components/vite'
  4. import { VantResolver } from '@vant/auto-import-resolver'
  5. import { defineConfig, loadEnv, UserConfig } from 'vite'
  6. import vue from '@vitejs/plugin-vue'
  7. import vueDevTools from 'vite-plugin-vue-devtools'
  8. // https://vite.dev/config/
  9. export default defineConfig(({ mode }): UserConfig => {
  10. const root = process.cwd()
  11. const env = loadEnv(mode, root)
  12. const isProduction = mode === 'production'
  13. return {
  14. plugins: [
  15. vue(),
  16. !isProduction && vueDevTools(),
  17. AutoImport({
  18. resolvers: [VantResolver()],
  19. }),
  20. Components({
  21. resolvers: [VantResolver()],
  22. }),
  23. ].filter(Boolean),
  24. resolve: {
  25. alias: {
  26. '@': fileURLToPath(new URL('./src', import.meta.url)),
  27. },
  28. },
  29. server: {
  30. open: false,
  31. proxy: {
  32. '/api': {
  33. target: env.VITE_APP_URL,
  34. changeOrigin: true,
  35. rewrite: (path) => path.replace(/^\/api/, ''),
  36. },
  37. },
  38. },
  39. build: {
  40. rollupOptions: {
  41. output: {
  42. entryFileNames: `assets/[name].[hash].js`,
  43. chunkFileNames: `assets/[name].[hash].js`,
  44. assetFileNames: `assets/[name].[hash].[ext]`,
  45. // 使用 Vite 原生 manualChunks 替代 chunk-split 插件
  46. manualChunks(id: string) {
  47. if (id.includes('node_modules')) {
  48. if (id.includes('lodash-es')) return 'vendor-lodash'
  49. if (id.includes('echarts')) return 'vendor-echarts'
  50. return 'vendor'
  51. }
  52. },
  53. },
  54. },
  55. },
  56. }
  57. })