vite.config.ts 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  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 {viteMockServe} from "vite-plugin-mock";
  10. import visualizer from "rollup-plugin-visualizer";
  11. import UnoCSS from "unocss/vite";
  12. import path from "path";
  13. import viteCompression from "vite-plugin-compression";
  14. const pathSrc = path.resolve(__dirname, "src");
  15. export default defineConfig(({mode}: ConfigEnv): UserConfig => {
  16. const env = loadEnv(mode, process.cwd());
  17. return {
  18. resolve: {
  19. alias: {
  20. "@": pathSrc,
  21. },
  22. },
  23. css: {
  24. // CSS 预处理器
  25. preprocessorOptions: {
  26. //define global scss variable
  27. scss: {
  28. javascriptEnabled: true,
  29. additionalData: `
  30. @use "@/styles/variables.scss" as *;
  31. `,
  32. },
  33. },
  34. },
  35. server: {
  36. host: "0.0.0.0",
  37. port: Number(env.VITE_APP_PORT),
  38. open: true, // 运行是否自动打开浏览器
  39. proxy: {
  40. // 反向代理解决跨域
  41. [env.VITE_APP_BASE_API]: {
  42. target: "http://devapi.shuimuai.com/", // 线上接口地址
  43. // target: 'http://localhost:8989', // 本地接口地址 , 后端工程仓库地址:https://gitee.com/youlaiorg/youlai-boot
  44. changeOrigin: true,
  45. rewrite: (path) => path.replace(new RegExp("^" + env.VITE_APP_BASE_API), ""), // 替换 /dev-api 为 target 接口地址
  46. },
  47. },
  48. },
  49. plugins: [
  50. vue(),
  51. UnoCSS({}),
  52. AutoImport({
  53. // 自动导入 Vue 相关函数,如:ref, reactive, toRef 等
  54. imports: ["vue", "@vueuse/core"],
  55. eslintrc: {
  56. enabled: false,
  57. filepath: "./.eslintrc-auto-import.json",
  58. globalsPropValue: true,
  59. },
  60. resolvers: [
  61. // 自动导入 Element Plus 相关函数,如:ElMessage, ElMessageBox... (带样式)
  62. ElementPlusResolver(),
  63. IconsResolver({}),
  64. ],
  65. vueTemplate: true,
  66. // 配置文件生成位置(false:关闭自动生成)
  67. dts: false,
  68. // dts: "src/types/auto-imports.d.ts",
  69. }),
  70. Components({
  71. resolvers: [
  72. // 自动导入 Element Plus 组件
  73. ElementPlusResolver(),
  74. // 自动导入图标组件
  75. IconsResolver({
  76. // @iconify-json/ep 是 Element Plus 的图标库
  77. enabledCollections: ["ep"],
  78. }),
  79. ],
  80. // 指定自定义组件位置(默认:src/components)
  81. dirs: ["src/**/components"],
  82. // 配置文件位置(false:关闭自动生成)
  83. dts: false,
  84. // dts: "src/types/components.d.ts",
  85. }),
  86. Icons({
  87. // 自动安装图标库
  88. autoInstall: true,
  89. }),
  90. createSvgIconsPlugin({
  91. // 指定需要缓存的图标文件夹
  92. iconDirs: [path.resolve(pathSrc, "assets/icons")],
  93. // 指定symbolId格式
  94. symbolId: "icon-[dir]-[name]",
  95. }),
  96. // 代码压缩
  97. viteCompression({
  98. verbose: true, // 默认即可
  99. disable: true, // 是否禁用压缩,默认禁用,true为禁用,false为开启,打开压缩需配置nginx支持
  100. deleteOriginFile: true, // 删除源文件
  101. threshold: 10240, // 压缩前最小文件大小
  102. algorithm: "gzip", // 压缩算法
  103. ext: ".gz", // 文件类型
  104. }),
  105. viteMockServe({
  106. ignore: /^\_/,
  107. mockPath: "mock",
  108. enable: mode === "development",
  109. // https://github.com/anncwb/vite-plugin-mock/issues/9
  110. }),
  111. visualizer({
  112. filename: "./stats.html",
  113. open: false,
  114. gzipSize: true,
  115. brotliSize: true,
  116. }),
  117. ],
  118. // 预加载项目必需的组件
  119. optimizeDeps: {
  120. include: [
  121. "vue",
  122. "vue-router",
  123. "pinia",
  124. "axios",
  125. "element-plus/es/components/form/style/css",
  126. "element-plus/es/components/form-item/style/css",
  127. "element-plus/es/components/button/style/css",
  128. "element-plus/es/components/input/style/css",
  129. "element-plus/es/components/input-number/style/css",
  130. "element-plus/es/components/switch/style/css",
  131. "element-plus/es/components/upload/style/css",
  132. "element-plus/es/components/menu/style/css",
  133. "element-plus/es/components/col/style/css",
  134. "element-plus/es/components/icon/style/css",
  135. "element-plus/es/components/row/style/css",
  136. "element-plus/es/components/tag/style/css",
  137. "element-plus/es/components/dialog/style/css",
  138. "element-plus/es/components/loading/style/css",
  139. "element-plus/es/components/radio/style/css",
  140. "element-plus/es/components/radio-group/style/css",
  141. "element-plus/es/components/popover/style/css",
  142. "element-plus/es/components/scrollbar/style/css",
  143. "element-plus/es/components/tooltip/style/css",
  144. "element-plus/es/components/dropdown/style/css",
  145. "element-plus/es/components/dropdown-menu/style/css",
  146. "element-plus/es/components/dropdown-item/style/css",
  147. "element-plus/es/components/sub-menu/style/css",
  148. "element-plus/es/components/menu-item/style/css",
  149. "element-plus/es/components/divider/style/css",
  150. "element-plus/es/components/card/style/css",
  151. "element-plus/es/components/link/style/css",
  152. "element-plus/es/components/breadcrumb/style/css",
  153. "element-plus/es/components/breadcrumb-item/style/css",
  154. "element-plus/es/components/table/style/css",
  155. "element-plus/es/components/tree-select/style/css",
  156. "element-plus/es/components/table-column/style/css",
  157. "element-plus/es/components/select/style/css",
  158. "element-plus/es/components/option/style/css",
  159. "element-plus/es/components/pagination/style/css",
  160. "element-plus/es/components/tree/style/css",
  161. "element-plus/es/components/alert/style/css",
  162. "element-plus/es/components/radio-button/style/css",
  163. "element-plus/es/components/checkbox-group/style/css",
  164. "element-plus/es/components/checkbox/style/css",
  165. "element-plus/es/components/tabs/style/css",
  166. "element-plus/es/components/tab-pane/style/css",
  167. "element-plus/es/components/rate/style/css",
  168. "element-plus/es/components/date-picker/style/css",
  169. "element-plus/es/components/notification/style/css",
  170. "@vueuse/core",
  171. "sortablejs",
  172. "path-to-regexp",
  173. "echarts",
  174. "@wangeditor/editor",
  175. "@wangeditor/editor-for-vue",
  176. "vue-i18n",
  177. "codemirror",
  178. ],
  179. },
  180. };
  181. });