index.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import { type PluginOption } from 'vite';
  2. import { configHtmlPlugin } from './html';
  3. import { configMockPlugin } from './mock';
  4. import { configCompressPlugin } from './compress';
  5. import { configVisualizerConfig } from './visualizer';
  6. import { configSvgIconsPlugin } from './svgSprite';
  7. import { createAppConfigPlugin } from './appConfig';
  8. import vue from '@vitejs/plugin-vue';
  9. import vueJsx from '@vitejs/plugin-vue-jsx';
  10. import purgeIcons from 'vite-plugin-purge-icons';
  11. import windiCSS from 'vite-plugin-windicss';
  12. interface Options {
  13. isBuild: boolean;
  14. root: string;
  15. compress: string;
  16. enableMock?: boolean;
  17. enableAnalyze?: boolean;
  18. }
  19. async function createPlugins({ isBuild, root, enableMock, compress, enableAnalyze }: Options) {
  20. const vitePlugins: (PluginOption | PluginOption[])[] = [vue(), vueJsx()];
  21. const appConfigPlugin = await createAppConfigPlugin({ root, isBuild });
  22. vitePlugins.push(appConfigPlugin);
  23. // vite-plugin-windicss
  24. vitePlugins.push(windiCSS());
  25. // vite-plugin-html
  26. vitePlugins.push(configHtmlPlugin({ isBuild }));
  27. // vite-plugin-svg-icons
  28. vitePlugins.push(configSvgIconsPlugin({ isBuild }));
  29. // vite-plugin-purge-icons
  30. vitePlugins.push(purgeIcons());
  31. // The following plugins only work in the production environment
  32. if (isBuild) {
  33. // rollup-plugin-gzip
  34. vitePlugins.push(
  35. configCompressPlugin({
  36. compress,
  37. }),
  38. );
  39. }
  40. // rollup-plugin-visualizer
  41. if (enableAnalyze) {
  42. vitePlugins.push(configVisualizerConfig());
  43. }
  44. // vite-plugin-mock
  45. if (enableMock) {
  46. vitePlugins.push(configMockPlugin({ isBuild }));
  47. }
  48. return vitePlugins;
  49. }
  50. export { createPlugins };