index.ts 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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. console.log('======================');
  40. console.log(VITE_USE_PWA);
  41. console.log('======================');
  42. vitePlugins.push(VitePWA());
  43. }
  44. // vite-plugin-mock
  45. if (isDevFn() && VITE_USE_MOCK) {
  46. // open mock
  47. vitePlugins.push(
  48. createMockServer({
  49. ignore: /^\_/,
  50. mockPath: 'mock',
  51. })
  52. );
  53. }
  54. return vitePlugins;
  55. }
  56. // gen rollup plugins
  57. export function createRollupPlugin() {
  58. const rollupPlugins: rollupPlugin[] = [];
  59. if (isProdFn()) {
  60. if (isReportMode()) {
  61. // rollup-plugin-visualizer
  62. rollupPlugins.push(
  63. visualizer({ filename: './build/.cache/stats.html', open: true }) as Plugin
  64. );
  65. }
  66. if (isBuildGzip() || isSiteMode()) {
  67. // rollup-plugin-gizp
  68. rollupPlugins.push(gzipPlugin());
  69. }
  70. }
  71. return rollupPlugins;
  72. }