vite.config.ts 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import { defineConfig, loadEnv, type ConfigEnv, type UserConfig } from 'vite'
  2. import { initVitePlugins } from './plugins'
  3. import { initProxy } from './plugins/proxy'
  4. import { resolve } from 'path'
  5. import { wrapperEnv } from './getEnv'
  6. const pathSrc = resolve(__dirname, 'src')
  7. // https://vite.dev/config/
  8. export default defineConfig(({ mode, command }: ConfigEnv): UserConfig => {
  9. const root = process.cwd()
  10. const env = loadEnv(mode, root)
  11. const viteEnv = wrapperEnv(env)
  12. return {
  13. server: {
  14. port: viteEnv.VITE_PORT,
  15. open: viteEnv.VITE_OPEN,
  16. proxy: initProxy(viteEnv.VITE_PROXY)
  17. },
  18. resolve: {
  19. alias: {
  20. '@': pathSrc
  21. }
  22. },
  23. plugins: initVitePlugins(viteEnv, command === 'build'),
  24. build: {
  25. outDir: 'dist',
  26. minify: 'esbuild',
  27. sourcemap: false
  28. },
  29. css: {
  30. preprocessorOptions: {
  31. scss: {
  32. additionalData: `@use "@/assets/styles/variables.scss" as *;`
  33. }
  34. }
  35. },
  36. optimizeDeps: {
  37. include: [
  38. 'vue',
  39. 'vue-router',
  40. 'pinia',
  41. 'axios',
  42. '@vueuse/core',
  43. 'element-plus',
  44. '@element-plus/icons-vue',
  45. 'element-plus/es',
  46. 'element-plus/es/components/base/style/css',
  47. 'element-plus/es/components/config-provider/style/css',
  48. 'element-plus/es/components/button/style/css',
  49. 'element-plus/es/components/form/style/css',
  50. 'element-plus/es/components/form-item/style/css',
  51. 'element-plus/es/components/input/style/css',
  52. 'element-plus/es/components/container/style/css',
  53. 'element-plus/es/components/footer/style/css',
  54. 'element-plus/es/components/main/style/css',
  55. 'element-plus/es/components/header/style/css',
  56. 'element-plus/es/components/message/style/css',
  57. 'element-plus/es/components/menu/style/css',
  58. 'element-plus/es/components/sub-menu/style/css',
  59. 'element-plus/es/components/menu-item/style/css',
  60. 'element-plus/es/components/loading/style/css',
  61. 'element-plus/es/components/table/style/css',
  62. 'element-plus/es/components/table-column/style/css',
  63. 'element-plus/es/components/tag/style/css',
  64. 'element-plus/es/components/icon/style/css',
  65. 'element-plus/es/components/radio/style/css',
  66. 'element-plus/es/components/avatar/style/css',
  67. 'element-plus/es/components/drawer/style/css',
  68. 'element-plus/es/components/switch/style/css',
  69. 'element-plus/es/components/pagination/style/css',
  70. 'element-plus/es/components/space/style/css',
  71. 'element-plus/es/components/tooltip/style/css',
  72. 'element-plus/es/components/tree/style/css',
  73. 'element-plus/es/components/scrollbar/style/css',
  74. 'element-plus/es/components/tabs/style/css',
  75. 'element-plus/es/components/tab-pane/style/css',
  76. 'sortablejs',
  77. 'element-plus/es/components/dropdown/style/css',
  78. 'element-plus/es/components/dropdown-menu/style/css',
  79. 'element-plus/es/components/dropdown-item/style/css',
  80. 'element-plus/es/components/message-box/style/css'
  81. ]
  82. }
  83. }
  84. })