vite.config.ts 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. import vue from "@vitejs/plugin-vue";
  2. import { UserConfig, ConfigEnv, loadEnv, defineConfig } from "vite";
  3. import AutoImport from "unplugin-auto-import/vite";
  4. import Components from "unplugin-vue-components/vite";
  5. import { ElementPlusResolver } from "unplugin-vue-components/resolvers";
  6. import Icons from "unplugin-icons/vite";
  7. import IconsResolver from "unplugin-icons/resolver";
  8. import { createSvgIconsPlugin } from "vite-plugin-svg-icons";
  9. import UnoCSS from "unocss/vite";
  10. import path from "path";
  11. const pathSrc = path.resolve(__dirname, "src");
  12. export default defineConfig(({ mode }: ConfigEnv): UserConfig => {
  13. const env = loadEnv(mode, process.cwd());
  14. return {
  15. resolve: {
  16. alias: {
  17. "@": pathSrc,
  18. },
  19. },
  20. css: {
  21. // CSS 预处理器
  22. preprocessorOptions: {
  23. //define global scss variable
  24. scss: {
  25. javascriptEnabled: true,
  26. additionalData: `
  27. @use "@/styles/variables.scss" as *;
  28. `,
  29. },
  30. },
  31. },
  32. server: {
  33. host: "0.0.0.0",
  34. port: Number(env.VITE_APP_PORT),
  35. open: true, // 运行是否自动打开浏览器
  36. proxy: {
  37. // 反向代理解决跨域
  38. [env.VITE_APP_BASE_API]: {
  39. //target: "http://vapi.youlai.tech", // 线上接口地址
  40. target: "http://devapi.shuimuai.com/", // 本地接口地址
  41. changeOrigin: true,
  42. rewrite: (path) =>
  43. path.replace(new RegExp("^" + env.VITE_APP_BASE_API), ""), // 替换 /dev-api 为 target 接口地址
  44. },
  45. },
  46. },
  47. plugins: [
  48. vue(),
  49. UnoCSS({
  50. /* options */
  51. }),
  52. AutoImport({
  53. // 自动导入 Vue 相关函数,如:ref, reactive, toRef 等
  54. imports: ["vue", "@vueuse/core"],
  55. eslintrc: {
  56. enabled: false, // Default `false`
  57. filepath: "./.eslintrc-auto-import.json", // Default `./.eslintrc-auto-import.json`
  58. globalsPropValue: true, // Default `true`, (true | false | 'readonly' | 'readable' | 'writable' | 'writeable')
  59. },
  60. resolvers: [
  61. // 自动导入 Element Plus 相关函数,如:ElMessage, ElMessageBox... (带样式)
  62. ElementPlusResolver(),
  63. // 自动导入图标组件
  64. IconsResolver({}),
  65. ],
  66. vueTemplate: true, // 是否在 vue 模板中自动导入
  67. dts: false, // 关闭自动生成
  68. //dts: path.resolve(pathSrc, "types", "auto-imports.d.ts"), // 自动导入组件类型声明文件位置,默认根目录
  69. }),
  70. Components({
  71. resolvers: [
  72. // 自动注册图标组件
  73. IconsResolver({
  74. enabledCollections: ["ep"], //@iconify-json/ep 是 Element Plus 的图标库
  75. }),
  76. // 自动导入 Element Plus 组件
  77. ElementPlusResolver(),
  78. ],
  79. dts: false, // 关闭自动生成
  80. // dts: path.resolve(pathSrc, "types", "components.d.ts"), // 自动导入组件类型声明文件位置,默认根目录
  81. }),
  82. Icons({
  83. // 自动安装图标库
  84. autoInstall: true,
  85. }),
  86. createSvgIconsPlugin({
  87. // 指定需要缓存的图标文件夹
  88. iconDirs: [path.resolve(pathSrc, "assets/icons")],
  89. // 指定symbolId格式
  90. symbolId: "icon-[dir]-[name]",
  91. }),
  92. ],
  93. optimizeDeps: {
  94. include: [
  95. "vue",
  96. "vue-router",
  97. "pinia",
  98. "axios",
  99. "element-plus/es/components/form/style/css",
  100. "element-plus/es/components/form-item/style/css",
  101. "element-plus/es/components/button/style/css",
  102. "element-plus/es/components/input/style/css",
  103. "element-plus/es/components/input-number/style/css",
  104. "element-plus/es/components/switch/style/css",
  105. "element-plus/es/components/upload/style/css",
  106. "element-plus/es/components/menu/style/css",
  107. "element-plus/es/components/col/style/css",
  108. "element-plus/es/components/icon/style/css",
  109. "element-plus/es/components/row/style/css",
  110. "element-plus/es/components/tag/style/css",
  111. "element-plus/es/components/dialog/style/css",
  112. "element-plus/es/components/loading/style/css",
  113. "element-plus/es/components/radio/style/css",
  114. "element-plus/es/components/radio-group/style/css",
  115. "element-plus/es/components/popover/style/css",
  116. "element-plus/es/components/scrollbar/style/css",
  117. "element-plus/es/components/tooltip/style/css",
  118. "element-plus/es/components/dropdown/style/css",
  119. "element-plus/es/components/dropdown-menu/style/css",
  120. "element-plus/es/components/dropdown-item/style/css",
  121. "element-plus/es/components/sub-menu/style/css",
  122. "element-plus/es/components/menu-item/style/css",
  123. "element-plus/es/components/divider/style/css",
  124. "element-plus/es/components/card/style/css",
  125. "element-plus/es/components/link/style/css",
  126. "element-plus/es/components/breadcrumb/style/css",
  127. "element-plus/es/components/breadcrumb-item/style/css",
  128. "element-plus/es/components/table/style/css",
  129. "element-plus/es/components/tree-select/style/css",
  130. "element-plus/es/components/table-column/style/css",
  131. "element-plus/es/components/select/style/css",
  132. "element-plus/es/components/option/style/css",
  133. "element-plus/es/components/pagination/style/css",
  134. "element-plus/es/components/tree/style/css",
  135. "element-plus/es/components/alert/style/css",
  136. "@vueuse/core",
  137. "path-to-regexp",
  138. "echarts",
  139. "@wangeditor/editor",
  140. "@wangeditor/editor-for-vue",
  141. "vue-i18n",
  142. "codemirror",
  143. ],
  144. },
  145. };
  146. });