plugins.ts 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. import { PluginOption } from 'vite'
  2. import { VitePWA } from "vite-plugin-pwa";
  3. import { createSvgIconsPlugin } from "vite-plugin-svg-icons";
  4. import { createHtmlPlugin } from "vite-plugin-html";
  5. import { visualizer } from "rollup-plugin-visualizer";
  6. import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';
  7. import AutoImport from 'unplugin-auto-import/vite';
  8. import Components from 'unplugin-vue-components/vite';
  9. import viteCompression from 'vite-plugin-compression';
  10. import vue from "@vitejs/plugin-vue";
  11. import path from "path";
  12. export const createVitePlugins = (
  13. mode: string,
  14. ): (PluginOption | PluginOption[])[] => {
  15. return [
  16. vue(),
  17. visualizer({ open: true }),
  18. viteCompression({
  19. verbose: true,
  20. disable: false,
  21. threshold: 10240,
  22. algorithm: 'gzip',
  23. ext: '.gz',
  24. }),
  25. AutoImport({
  26. imports: ['vue'],
  27. dts: path.resolve(__dirname, "../src/types/auto-imports.d.ts"),
  28. eslintrc: {
  29. enabled: true
  30. },
  31. resolvers: [ElementPlusResolver()],
  32. }),
  33. Components({
  34. resolvers: [ElementPlusResolver()],
  35. dts: path.resolve(__dirname, "../src/types/components.d.ts"),
  36. }),
  37. VitePWA({
  38. registerType: "autoUpdate",
  39. workbox: {
  40. cacheId: "sd-designer-cache",
  41. runtimeCaching: [
  42. {
  43. urlPattern: /.*/i,
  44. handler: "NetworkFirst", // 接口网络优先
  45. options: {
  46. cacheName: "interface-cache",
  47. },
  48. },
  49. {
  50. urlPattern: /(.*?)\.(js|css|ts)/, // js /css /ts静态资源缓存
  51. handler: "CacheFirst",
  52. options: {
  53. cacheName: "js-css-cache",
  54. },
  55. },
  56. {
  57. urlPattern: /(.*?)\.(png|jpe?g|svg|gif|bmp|psd|tiff|tga|eps)/, // 图片缓存
  58. handler: "CacheFirst",
  59. options: {
  60. cacheName: "image-cache",
  61. },
  62. },
  63. ],
  64. },
  65. manifest: {
  66. name: "sd-designer",
  67. short_name: "sd-designer",
  68. theme_color: "#d14424",
  69. icons: [
  70. {
  71. src: "/img/icons/sd-designer-192x192.png",
  72. sizes: "192x192",
  73. type: "image/png",
  74. },
  75. {
  76. src: "/img/icons/sd-designer-512x512.png",
  77. sizes: "512x512",
  78. type: "image/png",
  79. },
  80. {
  81. src: "/img/icons/sd-designer-192x192.png",
  82. sizes: "192x192",
  83. type: "image/png",
  84. purpose: "maskable",
  85. },
  86. {
  87. src: "/img/icons/sd-designer-512x512.png",
  88. sizes: "512x512",
  89. type: "image/png",
  90. purpose: "maskable",
  91. },
  92. ],
  93. start_url: "./index.html",
  94. display: "standalone",
  95. background_color: "#000000",
  96. },
  97. devOptions: {
  98. enabled: false,
  99. }
  100. }),
  101. createSvgIconsPlugin({
  102. iconDirs: [path.resolve(process.cwd(), "src/icons/svg")], // icon存放的目录
  103. symbolId: "icon-[name]", // symbol的id
  104. inject: "body-last", // 插入的位置
  105. customDomId: "__svg__icons__dom__", // svg的id
  106. }),
  107. createHtmlPlugin({
  108. minify: true,
  109. inject: {
  110. data: {
  111. title: 'sd-designer'
  112. }
  113. }
  114. })
  115. ]
  116. }