plugin.ts 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import type { Plugin } from 'vite';
  2. import vue from '@vitejs/plugin-vue';
  3. import vueJsx from '@vitejs/plugin-vue-jsx';
  4. import Components from 'unplugin-vue-components/vite';
  5. import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers';
  6. import AutoImport from 'unplugin-auto-import/vite';
  7. import legacy from '@vitejs/plugin-legacy';
  8. import compression from 'vite-plugin-compression';
  9. export function createVitePlugins(isBuild: boolean, env: Record<string, string>): Plugin[] {
  10. const plugins = [
  11. vue(),
  12. vueJsx(),
  13. Components({
  14. dirs: ['src/components'],
  15. extensions: ['vue'],
  16. deep: true,
  17. resolvers: [
  18. AntDesignVueResolver({
  19. // 用于less变更主题用
  20. importStyle: 'less',
  21. /**
  22. * resolve `ant-design-vue' icons
  23. * requires package `@ant-design/icons-vue`
  24. */
  25. resolveIcons: true
  26. })
  27. ],
  28. dts: 'src/components.d.ts'
  29. }),
  30. AutoImport({
  31. imports: [
  32. 'vue',
  33. 'vue-router',
  34. {
  35. '@vueuse/core': ['useLocalStorage', 'onClickOutside', 'useSessionStorage']
  36. }
  37. ],
  38. dts: 'src/auto-imports.d.ts'
  39. })
  40. ];
  41. if (isBuild) {
  42. if (env.VITE_BUILD_LEAGCY === 'on') {
  43. plugins.push(
  44. legacy({
  45. targets: ['ie >= 11'],
  46. additionalLegacyPolyfills: ['regenerator-runtime/runtime']
  47. })
  48. );
  49. }
  50. if (env.VITE_BUILD_GZIP === 'on') {
  51. plugins.push(
  52. compression({
  53. // 生成压缩包后缀
  54. ext: '.gz',
  55. // 是否在控制台输出压缩结果
  56. verbose: true,
  57. // 压缩后是否删除源文件
  58. deleteOriginFile: false,
  59. // 超过的进行压缩,单位为b
  60. threshold: 5 * 1024 + 1 // 5KB
  61. })
  62. );
  63. }
  64. }
  65. return plugins;
  66. }