plugins.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import path from 'node:path';
  2. import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite';
  3. import vue from '@vitejs/plugin-vue';
  4. import vueJsx from '@vitejs/plugin-vue-jsx';
  5. import UnoCSS from 'unocss/vite';
  6. import AutoImport from 'unplugin-auto-import/vite';
  7. import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';
  8. import Components from 'unplugin-vue-components/vite';
  9. import compressPlugin from 'vite-plugin-compression';
  10. type Algorithm = 'gzip' | 'brotliCompress' | 'deflate' | 'deflateRaw';
  11. interface Config {
  12. threshold: number
  13. filter: (path: string) => boolean
  14. deleteOriginFile: boolean
  15. ext?: string
  16. algorithm?: Algorithm
  17. }
  18. // 压缩插件
  19. const configCompressPlugin = function (compress: string) {
  20. if (compress === 'none') {
  21. return null;
  22. }
  23. const config: Config = {
  24. threshold: 10240,
  25. filter: (file) => {
  26. return /\.(?:js|css|html|json|xml|svg|wasm|woff|woff2)$/.test(file); // 只压缩指定的文件类型
  27. },
  28. deleteOriginFile: false,
  29. };
  30. if (compress === 'brotli') {
  31. config.ext = '.br';
  32. config.algorithm = 'brotliCompress';
  33. }
  34. return compressPlugin(config);
  35. };
  36. // 创建 Vite 插件
  37. export default function createVitePlugins(env: any) {
  38. return [
  39. vue(),
  40. vueJsx(),
  41. UnoCSS(),
  42. AutoImport({
  43. dts: 'src/typings/auto-imports.d.ts',
  44. imports: ['vue', 'vue-router', 'pinia', '@vueuse/core'],
  45. resolvers: [ElementPlusResolver()],
  46. }),
  47. Components({
  48. dts: 'src/typings/components.d.ts',
  49. extensions: ['vue', 'tsx'],
  50. dirs: ['src/components'],
  51. resolvers: [ElementPlusResolver()],
  52. }),
  53. VueI18nPlugin({
  54. include: path.resolve(__dirname, '../src/locales/**'),
  55. }),
  56. configCompressPlugin(env.VITE_COMPRESSION),
  57. ];
  58. }