index.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import vue from '@vitejs/plugin-vue';
  2. import vueJsx from '@vitejs/plugin-vue-jsx';
  3. import { type PluginOption } from 'vite';
  4. import purgeIcons from 'vite-plugin-purge-icons';
  5. import DevTools from 'vite-plugin-vue-devtools';
  6. import { createAppConfigPlugin } from './appConfig';
  7. import { configCompressPlugin } from './compress';
  8. import { configHtmlPlugin } from './html';
  9. import { configMockPlugin } from './mock';
  10. import { configSvgIconsPlugin } from './svgSprite';
  11. import { configVisualizerConfig } from './visualizer';
  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. vitePlugins.push(DevTools());
  24. // vite-plugin-html
  25. vitePlugins.push(configHtmlPlugin({ isBuild }));
  26. // vite-plugin-svg-icons
  27. vitePlugins.push(configSvgIconsPlugin({ isBuild }));
  28. // vite-plugin-purge-icons
  29. vitePlugins.push(purgeIcons());
  30. // The following plugins only work in the production environment
  31. if (isBuild) {
  32. // rollup-plugin-gzip
  33. vitePlugins.push(
  34. configCompressPlugin({
  35. compress,
  36. }),
  37. );
  38. }
  39. // rollup-plugin-visualizer
  40. if (enableAnalyze) {
  41. vitePlugins.push(configVisualizerConfig());
  42. }
  43. // vite-plugin-mock
  44. if (enableMock) {
  45. vitePlugins.push(configMockPlugin({ isBuild }));
  46. }
  47. return vitePlugins;
  48. }
  49. export { createPlugins };