vite.config.ts 2.4 KB

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