plugins.ts 2.5 KB

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