vite.config.ts 2.0 KB

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