vben
2023-04-05 d25df8321e22c76d1abe01fe4f969520555d20fa
提交 | 用户 | age
5e9946 1 import { type PluginOption } from 'vite';
V 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
12 interface Options {
13   isBuild: boolean;
14   root: string;
15   compress: string;
16   enableMock?: boolean;
17   enableAnalyze?: boolean;
18 }
19
20 async function createPlugins({ isBuild, root, enableMock, compress, enableAnalyze }: Options) {
21   const vitePlugins: (PluginOption | PluginOption[])[] = [vue(), vueJsx()];
22
23   const appConfigPlugin = await createAppConfigPlugin({ root, isBuild });
24   vitePlugins.push(appConfigPlugin);
25
26   // vite-plugin-html
27   vitePlugins.push(configHtmlPlugin({ isBuild }));
28
29   // vite-plugin-svg-icons
30   vitePlugins.push(configSvgIconsPlugin({ isBuild }));
31
32   // vite-plugin-purge-icons
33   vitePlugins.push(purgeIcons());
34
35   // The following plugins only work in the production environment
36   if (isBuild) {
37     // rollup-plugin-gzip
38     vitePlugins.push(
39       configCompressPlugin({
40         compress,
41       }),
42     );
43   }
44
45   // rollup-plugin-visualizer
46   if (enableAnalyze) {
47     vitePlugins.push(configVisualizerConfig());
48   }
49
50   // vite-plugin-mock
51   if (enableMock) {
52     vitePlugins.push(configMockPlugin({ isBuild }));
53   }
54
55   return vitePlugins;
56 }
57
58 export { createPlugins };