vite.config.mjs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. /**
  2. * Copyright [2022] [https://www.xiaonuo.vip]
  3. * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
  4. * 1.请不要删除和修改根目录下的LICENSE文件。
  5. * 2.请不要删除和修改Snowy源码头部的版权声明。
  6. * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
  7. * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
  8. * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
  9. * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
  10. */
  11. import { resolve } from 'path'
  12. import { defineConfig, loadEnv } from 'vite'
  13. import vue from '@vitejs/plugin-vue'
  14. import Components from 'unplugin-vue-components/vite'
  15. import VueJSX from '@vitejs/plugin-vue-jsx'
  16. import AutoImport from 'unplugin-auto-import/vite'
  17. import vueSetupExtend from 'vite-plugin-vue-setup-extend'
  18. import { visualizer } from 'rollup-plugin-visualizer'
  19. import Less2CssVariablePlugin from 'antd-less-to-css-variable'
  20. import viteCompression from 'vite-plugin-compression'
  21. // ant-design-vue 的 less 变量,通过兼容包将 v4 变量转译成 v3 版本,并通过 less-loader 注入
  22. import { theme } from 'ant-design-vue/lib';
  23. import convertLegacyToken from 'ant-design-vue/lib/theme/convertLegacyToken';
  24. const { defaultAlgorithm, defaultSeed } = theme;
  25. const mapToken = defaultAlgorithm(defaultSeed);
  26. const v3Token = convertLegacyToken.default(mapToken);
  27. const time = new Date().getTime()
  28. export const r = (...args) => resolve(__dirname, '.', ...args)
  29. export default defineConfig(({ command, mode }) => {
  30. const envConfig = loadEnv(mode, './')
  31. const alias = {
  32. '~': `${resolve(__dirname, './')}`,
  33. '@/': `${resolve(__dirname, 'src')}/`
  34. }
  35. return {
  36. server: {
  37. port: envConfig.VITE_PORT,
  38. proxy: {
  39. '/api': {
  40. target: envConfig.VITE_API_BASEURL,
  41. ws: false,
  42. changeOrigin: true,
  43. rewrite: (path) => path.replace(/^\/api/, '')
  44. }
  45. }
  46. },
  47. resolve: {
  48. alias
  49. },
  50. // 解决警告You are running the esm-bundler build of vue-i18n.
  51. define: {
  52. __VUE_I18N_FULL_INSTALL__: true,
  53. __VUE_I18N_LEGACY_API__: true,
  54. __VUE_I18N_PROD_DEVTOOLS__: true,
  55. __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: true
  56. },
  57. build: {
  58. // sourcemap: true,
  59. outDir: "yqyc-web",
  60. manifest: true,
  61. brotliSize: false,
  62. rollupOptions: {
  63. output: {
  64. // manualChunks: {
  65. // echarts: ['echarts'],
  66. // 'ant-design-vue': ['ant-design-vue'],
  67. // vue: ['vue', 'vue-router', 'pinia', 'vue-i18n']
  68. // }
  69. manualChunks(id) {
  70. if (id.includes('node_modules')) {
  71. return time + id.toString().split('node_modules/')[1].split('/')[0].toString();
  72. } else {
  73. return time + id.toString();
  74. }
  75. // if(id.indexOf('node_modules') > -1) {
  76. // return 'vendor'
  77. // }
  78. }
  79. }
  80. },
  81. chunkSizeWarningLimit: 1000
  82. },
  83. plugins: [
  84. vue({
  85. script: {
  86. refTransform: true
  87. }
  88. }),
  89. viteCompression(),
  90. vueSetupExtend(),
  91. VueJSX(),
  92. AutoImport({
  93. imports: ['vue'],
  94. dirs: ['./src/utils/permission'],
  95. dts: r('src/auto-imports.d.ts')
  96. }),
  97. // 组件按需引入
  98. Components({
  99. dirs: [r('src/components')],
  100. dts: false,
  101. resolvers: []
  102. }),
  103. visualizer()
  104. ],
  105. css: {
  106. preprocessorOptions: {
  107. less: {
  108. javascriptEnabled: true,
  109. plugins: [new Less2CssVariablePlugin({
  110. // TODO:有必要用的情况下,是否需要传入 variables,可能会造成重复引用
  111. variables: { ...v3Token }
  112. })],
  113. modifyVars: v3Token
  114. }
  115. }
  116. },
  117. optimizeDeps: {}
  118. }
  119. })