import { PluginOption } from 'vite' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' import legacy from '@vitejs/plugin-legacy' import purgeIcons from 'vite-plugin-purge-icons' import windiCSS from 'vite-plugin-windicss' import VitePluginCertificate from 'vite-plugin-mkcert' import vueSetupExtend from 'vite-plugin-vue-setup-extend' import { configHtmlPlugin } from './html' import { configPwaConfig } from './pwa' import { configMockPlugin } from './mock' import { configCompressPlugin } from './compress' import { configStyleImportPlugin } from './styleImport' import { configVisualizerConfig } from './visualizer' import { configThemePlugin } from './theme' import { configImageminPlugin } from './imagemin' import { configSvgIconsPlugin } from './svgSprite' import topLevelAwait from 'vite-plugin-top-level-await' import AutoImport from 'unplugin-auto-import/vite' import type { ViteEnv } from '../../types/vite'; export function createVitePlugins(viteEnv: ViteEnv, isBuild: boolean) { const { VITE_USE_IMAGEMIN, VITE_USE_MOCK, VITE_LEGACY, VITE_BUILD_COMPRESS, VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE, } = viteEnv const vitePlugins: (PluginOption | PluginOption[])[] = [ // have to vue(), // have to vueJsx(), // support name vueSetupExtend(), VitePluginCertificate({ source: 'coding', }), topLevelAwait({ // The export name of top-level await promise for each chunk module promiseExportName: '__tla', // The function to generate import names of top-level await promise in each chunk module promiseImportName: (i) => `__tla_${i}`, }), AutoImport({ imports: ['vue', 'vue-router', 'pinia'], dts: true, }), ] // vite-plugin-windicss vitePlugins.push(windiCSS()) // @vitejs/plugin-legacy VITE_LEGACY && isBuild && vitePlugins.push(legacy()) // vite-plugin-html vitePlugins.push(configHtmlPlugin(viteEnv, isBuild)) // vite-plugin-svg-icons vitePlugins.push(configSvgIconsPlugin(isBuild)) // vite-plugin-mock VITE_USE_MOCK && vitePlugins.push(configMockPlugin(isBuild)) // vite-plugin-purge-icons vitePlugins.push(purgeIcons()) // vite-plugin-style-import vitePlugins.push(configStyleImportPlugin(isBuild)) // rollup-plugin-visualizer vitePlugins.push(configVisualizerConfig()) // vite-plugin-theme vitePlugins.push(configThemePlugin(isBuild)) // The following plugins only work in the production environment if (isBuild) { // vite-plugin-imagemin VITE_USE_IMAGEMIN && vitePlugins.push(configImageminPlugin()) // rollup-plugin-gzip vitePlugins.push( configCompressPlugin(VITE_BUILD_COMPRESS, VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE), ) // vite-plugin-pwa vitePlugins.push(configPwaConfig(viteEnv)) } return vitePlugins }