plugins.ts 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import { PluginOption } from 'vite'
  2. import { VitePWA } from 'vite-plugin-pwa'
  3. import { visualizer } from 'rollup-plugin-visualizer'
  4. import vue from '@vitejs/plugin-vue'
  5. import vueJsx from '@vitejs/plugin-vue-jsx'
  6. import eslintPlugin from 'vite-plugin-eslint'
  7. import simpleHtmlPlugin from 'vite-plugin-simple-html'
  8. import vueSetupExtend from 'unplugin-vue-setup-extend-plus/vite'
  9. import createAutoImport from '../vite/plugins/auto-import'
  10. import createComponents from '../vite/plugins/components'
  11. import prismjsPlugin from '../vite/plugins/prismjs-plugin'
  12. import createCompression from '../vite/plugins/compression'
  13. import createIcons from '../vite/plugins/icons'
  14. import createSvgIconsPlugin from '../vite/plugins/svg-icon'
  15. /**
  16. * 创建 vite 插件
  17. * @param viteEnv
  18. */
  19. export const createVitePlugins = (viteEnv: ViteEnv, isBuild = false): (PluginOption | PluginOption[])[] => {
  20. const { VITE_GLOB_APP_TITLE, VITE_REPORT, VITE_PWA } = viteEnv
  21. return [
  22. vue(),
  23. // vue 可以使用 jsx/tsx 语法
  24. vueJsx(),
  25. // esLint 报错信息显示在浏览器界面上
  26. eslintPlugin(),
  27. // name 可以写在 script 标签上
  28. vueSetupExtend({}),
  29. // vue api
  30. createAutoImport(),
  31. createComponents(),
  32. createIcons(),
  33. createSvgIconsPlugin(isBuild),
  34. // 创建打包压缩配置
  35. createCompression(viteEnv),
  36. // 注入变量到 html 文件
  37. simpleHtmlPlugin({
  38. minify: true,
  39. inject: {
  40. data: { title: VITE_GLOB_APP_TITLE }
  41. }
  42. }),
  43. // 代码高亮
  44. prismjsPlugin(),
  45. // vitePWA
  46. VITE_PWA && createVitePwa(viteEnv),
  47. // 是否生成包预览,分析依赖包大小做优化处理
  48. VITE_REPORT && (visualizer({ filename: 'stats.html', gzipSize: true, brotliSize: true }) as PluginOption)
  49. ]
  50. }
  51. /**
  52. * @description VitePwa
  53. * @param viteEnv
  54. */
  55. const createVitePwa = (viteEnv: ViteEnv): PluginOption | PluginOption[] => {
  56. const { VITE_GLOB_APP_TITLE } = viteEnv
  57. return VitePWA({
  58. registerType: 'autoUpdate',
  59. manifest: {
  60. name: VITE_GLOB_APP_TITLE,
  61. short_name: VITE_GLOB_APP_TITLE,
  62. theme_color: '#ffffff',
  63. icons: [
  64. {
  65. src: '/log.png',
  66. sizes: '192x192',
  67. type: 'image/png'
  68. },
  69. {
  70. src: '/log.png',
  71. sizes: '512x512',
  72. type: 'image/png'
  73. },
  74. {
  75. src: '/log.png',
  76. sizes: '512x512',
  77. type: 'image/png',
  78. purpose: 'any maskable'
  79. }
  80. ]
  81. }
  82. })
  83. }