index.ts 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import type { PluginOption } from 'vite';
  2. import vue from '@vitejs/plugin-vue';
  3. import vueJsx from '@vitejs/plugin-vue-jsx';
  4. import unocss from '@unocss/vite';
  5. import progress from 'vite-plugin-progress';
  6. import pageRoute from '@soybeanjs/vite-plugin-vue-page-route';
  7. import PurgeIcons from 'vite-plugin-purge-icons';
  8. import topLevelAwait from 'vite-plugin-top-level-await';
  9. import unplugin from './unplugin';
  10. import mock from './mock';
  11. import visualizer from './visualizer';
  12. import compress from './compress';
  13. import pwa from './pwa';
  14. /**
  15. * vite插件
  16. * @param viteEnv - 环境变量配置
  17. */
  18. export function setupVitePlugins(viteEnv: ImportMetaEnv): (PluginOption | PluginOption[])[] {
  19. const plugins = [
  20. vue({
  21. script: {
  22. defineModel: true
  23. }
  24. }),
  25. vueJsx(),
  26. ...unplugin(viteEnv),
  27. unocss(),
  28. mock(viteEnv),
  29. progress(),
  30. pageRoute(),
  31. PurgeIcons(),
  32. topLevelAwait({
  33. promiseExportName: '__tla',
  34. promiseImportName: i => `__tla_${i}`
  35. })
  36. ];
  37. if (viteEnv.VITE_VISUALIZER === 'Y') {
  38. plugins.push(visualizer as PluginOption);
  39. }
  40. if (viteEnv.VITE_COMPRESS === 'Y') {
  41. plugins.push(compress(viteEnv));
  42. }
  43. if (viteEnv.VITE_PWA === 'Y' || viteEnv.VITE_VERCEL === 'Y') {
  44. plugins.push(pwa());
  45. }
  46. return plugins;
  47. }