index.ts 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. interface Options {
  12. isBuild: boolean;
  13. root: string;
  14. compress: string;
  15. enableMock?: boolean;
  16. enableAnalyze?: boolean;
  17. }
  18. async function createPlugins({ isBuild, root, enableMock, compress, enableAnalyze }: Options) {
  19. const vitePlugins: (PluginOption | PluginOption[])[] = [vue(), vueJsx()];
  20. const appConfigPlugin = await createAppConfigPlugin({ root, isBuild });
  21. vitePlugins.push(appConfigPlugin);
  22. // vite-plugin-html
  23. vitePlugins.push(configHtmlPlugin({ isBuild }));
  24. // vite-plugin-svg-icons
  25. vitePlugins.push(configSvgIconsPlugin({ isBuild }));
  26. // vite-plugin-purge-icons
  27. vitePlugins.push(purgeIcons());
  28. // The following plugins only work in the production environment
  29. if (isBuild) {
  30. // rollup-plugin-gzip
  31. vitePlugins.push(
  32. configCompressPlugin({
  33. compress,
  34. }),
  35. );
  36. }
  37. // rollup-plugin-visualizer
  38. if (enableAnalyze) {
  39. vitePlugins.push(configVisualizerConfig());
  40. }
  41. // vite-plugin-mock
  42. if (enableMock) {
  43. vitePlugins.push(configMockPlugin({ isBuild }));
  44. }
  45. return vitePlugins;
  46. }
  47. export { createPlugins };