index.ts 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import type { Plugin as VitePlugin } from 'vite';
  2. import type { Plugin as rollupPlugin } from 'rollup';
  3. import { createMockServer } from 'vite-plugin-mock';
  4. import { VitePWA } from 'vite-plugin-pwa';
  5. import ViteHtmlPlugin from 'vite-plugin-html';
  6. import PurgeIcons from 'vite-plugin-purge-icons';
  7. import visualizer from 'rollup-plugin-visualizer';
  8. import gzipPlugin from './gzip/index';
  9. import { hmScript } from '../hm';
  10. // @ts-ignore
  11. import pkg from '../../../package.json';
  12. import { isDevFn, isProdFn, isSiteMode, ViteEnv, isReportMode, isBuildGzip } from '../../utils';
  13. import { GLOB_CONFIG_FILE_NAME } from '../../constant';
  14. // gen vite plugins
  15. export function createVitePlugins(viteEnv: ViteEnv) {
  16. const { VITE_USE_MOCK, VITE_GLOB_APP_TITLE, VITE_PUBLIC_PATH, VITE_USE_PWA } = viteEnv;
  17. const vitePlugins: VitePlugin[] = [];
  18. // vite-plugin-html
  19. vitePlugins.push(
  20. ViteHtmlPlugin({
  21. // html title
  22. title: VITE_GLOB_APP_TITLE,
  23. minify: isProdFn(),
  24. options: {
  25. // Package and insert additional configuration files
  26. injectConfig: isProdFn()
  27. ? `<script src='${VITE_PUBLIC_PATH || './'}${GLOB_CONFIG_FILE_NAME}?v=${
  28. pkg.version
  29. }-${new Date().getTime()}'></script>`
  30. : '',
  31. // Insert Baidu statistics code
  32. hmScript: isSiteMode() ? hmScript : '',
  33. },
  34. })
  35. );
  36. // vite-plugin-purge-icons
  37. vitePlugins.push(PurgeIcons());
  38. if (isProdFn() && VITE_USE_PWA) {
  39. vitePlugins.push(
  40. VitePWA({
  41. manifest: {
  42. name: 'Vben Admin',
  43. short_name: 'vben_admin',
  44. icons: [
  45. {
  46. src: './resource/img/pwa-192x192.png',
  47. sizes: '192x192',
  48. type: 'image/png',
  49. },
  50. {
  51. src: './resource/img/pwa-512x512.png',
  52. sizes: '512x512',
  53. type: 'image/png',
  54. },
  55. ],
  56. },
  57. })
  58. );
  59. }
  60. // vite-plugin-mock
  61. if (isDevFn() && VITE_USE_MOCK) {
  62. // open mock
  63. vitePlugins.push(
  64. createMockServer({
  65. ignore: /^\_/,
  66. mockPath: 'mock',
  67. })
  68. );
  69. }
  70. return vitePlugins;
  71. }
  72. // gen rollup plugins
  73. export function createRollupPlugin() {
  74. const rollupPlugins: rollupPlugin[] = [];
  75. if (isProdFn()) {
  76. if (isReportMode()) {
  77. // rollup-plugin-visualizer
  78. rollupPlugins.push(
  79. visualizer({ filename: './build/.cache/stats.html', open: true }) as Plugin
  80. );
  81. }
  82. if (isBuildGzip() || isSiteMode()) {
  83. // rollup-plugin-gizp
  84. rollupPlugins.push(gzipPlugin());
  85. }
  86. }
  87. return rollupPlugins;
  88. }