index.ts 2.2 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. const pkg = require('../../../package.json');
  11. import { isDevFn, isProdFn, isSiteMode, ViteEnv, isReportMode, isBuildGzip } from '../../utils';
  12. import { GLOB_CONFIG_FILE_NAME } from '../../constant';
  13. // gen vite plugins
  14. export function createVitePlugins(viteEnv: ViteEnv) {
  15. const { VITE_USE_MOCK, VITE_GLOB_APP_TITLE, VITE_PUBLIC_PATH, VITE_USE_PWA } = viteEnv;
  16. const vitePlugins: VitePlugin[] = [];
  17. // vite-plugin-html
  18. vitePlugins.push(
  19. ViteHtmlPlugin({
  20. // html title
  21. title: VITE_GLOB_APP_TITLE,
  22. minify: isProdFn(),
  23. options: {
  24. // Package and insert additional configuration files
  25. injectConfig: isProdFn()
  26. ? `<script src='${VITE_PUBLIC_PATH || './'}${GLOB_CONFIG_FILE_NAME}?v=${
  27. pkg.version
  28. }-${new Date().getTime()}'></script>`
  29. : '',
  30. // Insert Baidu statistics code
  31. hmScript: isSiteMode() ? hmScript : '',
  32. },
  33. })
  34. );
  35. // vite-plugin-purge-icons
  36. vitePlugins.push(PurgeIcons());
  37. if (isProdFn() && VITE_USE_PWA) {
  38. console.log('======================');
  39. console.log(VITE_USE_PWA);
  40. console.log('======================');
  41. vitePlugins.push(VitePWA());
  42. }
  43. // vite-plugin-mock
  44. if (isDevFn() && VITE_USE_MOCK) {
  45. // open mock
  46. vitePlugins.push(
  47. createMockServer({
  48. ignore: /^\_/,
  49. mockPath: 'mock',
  50. })
  51. );
  52. }
  53. return vitePlugins;
  54. }
  55. // gen rollup plugins
  56. export function createRollupPlugin() {
  57. const rollupPlugins: rollupPlugin[] = [];
  58. if (isProdFn()) {
  59. if (isReportMode()) {
  60. // rollup-plugin-visualizer
  61. rollupPlugins.push(
  62. visualizer({ filename: './build/.cache/stats.html', open: true }) as Plugin
  63. );
  64. }
  65. if (isBuildGzip() || isSiteMode()) {
  66. // rollup-plugin-gizp
  67. rollupPlugins.push(gzipPlugin());
  68. }
  69. }
  70. return rollupPlugins;
  71. }