1
0

plugins.ts 2.9 KB

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