import { PluginOption } from 'vite' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' import legacy from '@vitejs/plugin-legacy' import progress from 'vite-plugin-progress' import windiCSS from 'vite-plugin-windicss' import purgeIcons from 'vite-plugin-purge-icons' import VitePluginCertificate from 'vite-plugin-mkcert' import vueSetupExtend from 'unplugin-vue-setup-extend-plus/vite' import { configPwaConfig } from './pwa' import { configHtmlPlugin } from './html' import { configCompressPlugin } from './compress' import { configStyleImportPlugin } from './styleImport' import { configVisualizerConfig } from './visualizer' import { configThemePlugin } from './theme' import { configSvgIconsPlugin } from './svgSprite' import { isProdFn } from '../../utils' export function createVitePlugins(mode: string, viteEnv: ViteEnv, isBuild: boolean) { const { VITE_LEGACY, VITE_BUILD_COMPRESS, VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE } = viteEnv const vitePlugins: (PluginOption | PluginOption[])[] = [ // have to vue(), // have to vueJsx(), // 打包进度条 progress(), // support name vueSetupExtend({}), VitePluginCertificate({ source: 'coding' }) ] // 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-purge-icons vitePlugins.push(purgeIcons()) // vite-plugin-style-import if (isProdFn(mode)) { vitePlugins.push(configStyleImportPlugin(isBuild)) } // rollup-plugin-visualizer vitePlugins.push(configVisualizerConfig()) // vite-plugin-vben-theme vitePlugins.push(configThemePlugin(isBuild)) // The following plugins only work in the production environment if (isBuild) { // rollup-plugin-gzip vitePlugins.push(configCompressPlugin(VITE_BUILD_COMPRESS, VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE)) // vite-plugin-pwa vitePlugins.push(configPwaConfig(viteEnv)) } return vitePlugins }