vite.config.ts 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import vue from '@vitejs/plugin-vue';
  2. import { resolve } from 'path';
  3. import { defineConfig, ConfigEnv } from 'vite';
  4. import vueSetupExtend from 'vite-plugin-vue-setup-extend-plus'; // setup语法糖设置name
  5. import viteCompression from 'vite-plugin-compression'; //开启gzip打包压缩
  6. import vueJsx from '@vitejs/plugin-vue-jsx'; // jsx
  7. import { visualizer } from "rollup-plugin-visualizer";
  8. import { lazyImport, VxeResolver } from 'vite-plugin-lazy-import'
  9. // @ts-ignore
  10. export default defineConfig((mode: ConfigEnv) => {
  11. return {
  12. plugins: [
  13. vue(),
  14. vueSetupExtend(),
  15. viteCompression(),
  16. vueJsx({
  17. // options are passed on to @vue/babel-plugin-jsx
  18. }),
  19. visualizer({
  20. open: true, // true 打包完自动打开分析页面,false 不会自动弹出
  21. filename: "stats.html", // 分析图生成的文件名
  22. gzipSize: true, // 是否统计并显示gzip
  23. brotliSize: true, // 是否统计并显示brotli
  24. }),
  25. lazyImport({
  26. resolvers: [
  27. VxeResolver({
  28. libraryName: 'vxe-table'
  29. }),
  30. VxeResolver({
  31. libraryName: 'vxe-pc-ui'
  32. })
  33. ]
  34. })
  35. ],
  36. root: process.cwd(),
  37. resolve: { alias: { '@': resolve(__dirname, './src') } },
  38. base: mode.command === 'serve' ? './' : '/',
  39. hmr: true,
  40. server: {
  41. host: '0.0.0.0',
  42. port: 8888,
  43. open: true, // 是否打开浏览器
  44. },
  45. optimizeDeps:{
  46. include: ["lodash-es", "vue"]
  47. },
  48. build: {
  49. outDir: 'dist',
  50. sourcemap: false, // 是否生成 sourceMap 文件
  51. reportCompressedSize: false, // 关闭文件计算
  52. chunkSizeWarningLimit: 1500,
  53. rollupOptions: {
  54. output: {
  55. // 最小化拆分包
  56. manualChunks(id: any): string {
  57. if (id.includes('node_modules')) {
  58. return id.toString().split('node_modules/')[1].split('/')[0].toString();
  59. }
  60. },
  61. entryFileNames: `assets/[name].[hash].js`,
  62. chunkFileNames: `assets/[name].[hash].js`,
  63. assetFileNames: `assets/[name].[hash].[ext]`,
  64. compact: true,
  65. },
  66. },
  67. minify: 'terser',
  68. terserOptions: {
  69. //生产环境时移除console和debugger
  70. compress: {
  71. drop_console: false,
  72. drop_debugger: true,
  73. },
  74. },
  75. },
  76. css: {
  77. preprocessorOptions: {
  78. css: { charset: false },
  79. scss: {
  80. api: 'modern-compiler', // or 'modern'
  81. silenceDeprecations: ['legacy-js-api'],
  82. },
  83. },
  84. },
  85. };
  86. });