vite.config.ts 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import { fileURLToPath, URL } from 'node:url';
  2. import { ConfigEnv, UserConfig } from 'vite';
  3. import vue from '@vitejs/plugin-vue';
  4. import vueJsx from '@vitejs/plugin-vue-jsx';
  5. import compression from 'vite-plugin-compression';
  6. import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite';
  7. import vueDevTools from 'vite-plugin-vue-devtools';
  8. import { visualizer } from 'rollup-plugin-visualizer';
  9. import { proxy } from './src/config/proxy';
  10. import { cool } from '@cool-vue/vite-plugin';
  11. function toPath(dir: string) {
  12. return fileURLToPath(new URL(dir, import.meta.url));
  13. }
  14. // https://vitejs.dev/config
  15. export default ({ mode }: ConfigEnv): UserConfig => {
  16. const isDev = mode === 'development';
  17. return {
  18. plugins: [
  19. vue(),
  20. compression(),
  21. vueJsx(),
  22. // vueDevTools(),
  23. cool({
  24. type: 'admin',
  25. proxy,
  26. eps: {
  27. enable: true
  28. },
  29. svg: {
  30. skipNames: ['base', 'theme']
  31. },
  32. demo: mode == 'demo' // 是否开启演示模式
  33. }),
  34. // visualizer({
  35. // open: false,
  36. // gzipSize: true,
  37. // brotliSize: true
  38. // }),
  39. VueI18nPlugin({
  40. include: [toPath('./src/{modules,plugins}/**/locales/**')]
  41. })
  42. ],
  43. base: '/',
  44. server: {
  45. port: 9000,
  46. proxy,
  47. hmr: {
  48. overlay: true
  49. }
  50. },
  51. css: {
  52. preprocessorOptions: {
  53. scss: {
  54. charset: false,
  55. api: 'modern-compiler'
  56. }
  57. }
  58. },
  59. resolve: {
  60. alias: {
  61. '/@': toPath('./src'),
  62. '/$': toPath('./src/modules'),
  63. '/#': toPath('./src/plugins'),
  64. '/~': toPath('./packages')
  65. }
  66. },
  67. esbuild: {
  68. drop: isDev ? [] : ['console', 'debugger']
  69. },
  70. build: {
  71. minify: 'esbuild',
  72. // terserOptions: {
  73. // compress: {
  74. // drop_console: true,
  75. // drop_debugger: true
  76. // }
  77. // },
  78. sourcemap: isDev,
  79. rollupOptions: {
  80. output: {
  81. chunkFileNames: 'static/js/[name]-[hash].js',
  82. entryFileNames: 'static/js/[name]-[hash].js',
  83. assetFileNames: 'static/[ext]/[name]-[hash].[ext]',
  84. manualChunks(id) {
  85. if (id.includes('node_modules')) {
  86. if (!['@cool-vue/crud'].find(e => id.includes(e))) {
  87. if (id.includes('prettier')) {
  88. return;
  89. }
  90. return id
  91. .toString()
  92. .split('node_modules/')[1]
  93. .replace('.pnpm/', '')
  94. .split('/')[0];
  95. } else {
  96. return 'comm';
  97. }
  98. }
  99. }
  100. }
  101. }
  102. }
  103. };
  104. };