index.ts 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import { resolve } from 'path'
  2. import Vue from '@vitejs/plugin-vue'
  3. import VueJsx from '@vitejs/plugin-vue-jsx'
  4. import WindiCSS from 'vite-plugin-windicss'
  5. import progress from 'vite-plugin-progress'
  6. import EslintPlugin from 'vite-plugin-eslint'
  7. import PurgeIcons from 'vite-plugin-purge-icons'
  8. import { ViteEjsPlugin } from 'vite-plugin-ejs'
  9. import viteCompression from 'vite-plugin-compression'
  10. import vueSetupExtend from 'vite-plugin-vue-setup-extend'
  11. import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite'
  12. import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
  13. import {
  14. createStyleImportPlugin,
  15. ElementPlusResolve,
  16. VxeTableResolve
  17. } from 'vite-plugin-style-import'
  18. export function createVitePlugins(VITE_APP_TITLE: string) {
  19. const root = process.cwd()
  20. // 路径查找
  21. function pathResolve(dir: string) {
  22. return resolve(root, '.', dir)
  23. }
  24. return [
  25. Vue(),
  26. VueJsx(),
  27. WindiCSS(),
  28. progress(),
  29. PurgeIcons(),
  30. vueSetupExtend(),
  31. createStyleImportPlugin({
  32. resolves: [ElementPlusResolve(), VxeTableResolve()],
  33. libs: [
  34. {
  35. libraryName: 'element-plus',
  36. esModule: true,
  37. resolveStyle: (name) => {
  38. return `element-plus/es/components/${name.substring(3)}/style/css`
  39. }
  40. },
  41. {
  42. libraryName: 'vxe-table',
  43. esModule: true,
  44. resolveStyle: (name) => {
  45. return `vxe-table/es/${name}/style.css`
  46. }
  47. }
  48. ]
  49. }),
  50. EslintPlugin({
  51. cache: false,
  52. include: ['src/**/*.vue', 'src/**/*.ts', 'src/**/*.tsx'] // 检查的文件
  53. }),
  54. VueI18nPlugin({
  55. runtimeOnly: true,
  56. compositionOnly: true,
  57. include: [resolve(__dirname, 'src/locales/**')]
  58. }),
  59. createSvgIconsPlugin({
  60. iconDirs: [pathResolve('src/assets/svgs')],
  61. symbolId: 'icon-[dir]-[name]',
  62. svgoOptions: true
  63. }),
  64. viteCompression({
  65. verbose: true, // 是否在控制台输出压缩结果
  66. disable: false, // 是否禁用
  67. threshold: 10240, // 体积大于 threshold 才会被压缩,单位 b
  68. algorithm: 'gzip', // 压缩算法,可选 [ 'gzip' , 'brotliCompress' ,'deflate' , 'deflateRaw']
  69. ext: '.gz', // 生成的压缩包后缀
  70. deleteOriginFile: false //压缩后是否删除源文件
  71. }),
  72. ViteEjsPlugin({
  73. title: VITE_APP_TITLE
  74. })
  75. ]
  76. }