index.ts 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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. title: VITE_GLOB_APP_TITLE,
  34. },
  35. })
  36. );
  37. // vite-plugin-purge-icons
  38. vitePlugins.push(PurgeIcons());
  39. if (isProdFn() && VITE_USE_PWA) {
  40. vitePlugins.push(
  41. VitePWA({
  42. manifest: {
  43. name: 'Vben Admin',
  44. short_name: 'vben_admin',
  45. icons: [
  46. {
  47. src: './resource/img/pwa-192x192.png',
  48. sizes: '192x192',
  49. type: 'image/png',
  50. },
  51. {
  52. src: './resource/img/pwa-512x512.png',
  53. sizes: '512x512',
  54. type: 'image/png',
  55. },
  56. ],
  57. },
  58. })
  59. );
  60. }
  61. // vite-plugin-mock
  62. if (isDevFn() && VITE_USE_MOCK) {
  63. // open mock
  64. vitePlugins.push(
  65. createMockServer({
  66. ignore: /^\_/,
  67. mockPath: 'mock',
  68. })
  69. );
  70. }
  71. return vitePlugins;
  72. }
  73. // gen rollup plugins
  74. export function createRollupPlugin() {
  75. const rollupPlugins: rollupPlugin[] = [];
  76. if (isProdFn()) {
  77. if (isReportMode()) {
  78. // rollup-plugin-visualizer
  79. rollupPlugins.push(
  80. visualizer({ filename: './build/.cache/stats.html', open: true }) as Plugin
  81. );
  82. }
  83. if (isBuildGzip() || isSiteMode()) {
  84. // rollup-plugin-gizp
  85. rollupPlugins.push(gzipPlugin());
  86. }
  87. }
  88. return rollupPlugins;
  89. }