当前位置:   article > 正文

vite打包优化

vite打包优化

目录

一,现在系统没有任何打包优化设置的情况

二,优化项一,静态资源的打包处理(按分类存放相应的文件)

三,解决下列提示的警告 

解决方式一,提高静态资源的容量大小

解决方式二:超大静态资源拆分

四:gzip静态资源压缩

五,清除console和debugger

六,完整的vite.config.ts


一,现在系统没有任何打包优化设置的情况

现在存在下列问题问题:1,所有的文件都在assets目录下

                                        2,单个文件过大,出现警告

                                        3,包的大小没有经过处理

二,优化项一,静态资源的打包处理(按分类存放相应的文件)

  1. build: {
  2. outDir: 'JcCloudWeb',
  3. cssCodeSplit: true,
  4. rollupOptions: {
  5. input: 'index.html',
  6. output: {
  7. // 静态资源打包做处理
  8. chunkFileNames: 'static/js/[name]-[hash].js',
  9. entryFileNames: 'static/js/[name]-[hash].js',
  10. assetFileNames: 'static/[ext]/[name]-[hash].[ext]',
  11. manualChunks(id) {
  12. if (id.includes('node_modules')) {
  13. return id.toString().split('node_modules/')[1].split('/')[0].toString();
  14. }
  15. },
  16. },
  17. },
  18. },

打包后生成的结构目录为:

 结果:文件分类存放整洁多了

三,解决下列提示的警告

 

解决方式一,提高静态资源的容量大小

  1. build: {
  2. chunkSizeWarningLimit: 1500,
  3. }

这种方式只是解决了提示问题,解决不了根本问题。

解决方式二:超大静态资源拆分

如果不拆分:我们会发现生成的单个文件巨大,element-plus等第三方库,都不会单独抽离出来,跟业务逻辑代码混在一起,文件巨大。没拆分前js文件夹有190个js文件。

解决办法:还是老样子,我们在build里的output设置内,添加以下代码

  1. manualChunks(id) {
  2. if (id.includes('node_modules')) {
  3. return id.toString().split('node_modules/')[1].split('/')[0].toString();
  4. }
  5. }

 

  1. build: {
  2. outDir: 'JcCloudWeb',
  3. cssCodeSplit: true,
  4. rollupOptions: {
  5. input: 'index.html',
  6. output: {
  7. // 静态资源打包做处理
  8. chunkFileNames: 'static/js/[name]-[hash].js',
  9. entryFileNames: 'static/js/[name]-[hash].js',
  10. assetFileNames: 'static/[ext]/[name]-[hash].[ext]',
  11. manualChunks(id) {
  12. if (id.includes('node_modules')) {
  13. return id.toString().split('node_modules/')[1].split('/')[0].toString();
  14. }
  15. },
  16. },
  17. },
  18. },

再次 npm run build,文件就被拆开了,而不是所有引入的js都拼在一起。拆分后文件个数变成了206个,多了15个。单个文件也变小了。

 但是还是有个700多kb的echarts插件和500多kb的element-puls....所以按需引入eleplus和选择合适的插件还是很重要的。

四:gzip静态资源压缩

那么大文件也不能放任自流,我们还是可以通过gzip压缩来处理一下的先安装插件,控制台输入。

 npm i vite-plugin-compression -D

然后修改vite.congfig.js页面,引入并在plugin内使用

  1. import viteCompression from 'vite-plugin-compression'
  2. //在plugins配置数组里添加gzip插件
  3. plugins: [viteCompression({
  4. verbose: true,
  5. disable: false,
  6. threshold: 10240,
  7. algorithm: 'gzip',
  8. ext: '.gz',
  9. })],

npm run build

打开build之后的js文件,生成了相应的压缩文件

对比一下,没压缩之前的文件,确实小了很多。

 

缺点:就是打包后的文件会变大。没压缩之前文件是11.9M ,开启gzip静态资源压缩打包后的文件是14.9M

五,清除console和debugger

解决方式:添加如下代码,去除打包后的console.log 

  1. build: {
  2. minify: 'terser',
  3. terserOptions: {
  4. // 清除console和debugger
  5. compress: {
  6. drop_console: true,
  7. drop_debugger: true,
  8. },
  9. },
  10. },

再次打包生成后的js文件中,就几乎没有console.log以及debugger

六,完整的vite.config.ts

  1. import path from 'path';
  2. import { defineConfig } from 'vite';
  3. import vue from '@vitejs/plugin-vue';
  4. import vueJsx from '@vitejs/plugin-vue-jsx';
  5. import Components from 'unplugin-vue-components/vite';
  6. import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';
  7. import { viteCommonjs } from '@originjs/vite-plugin-commonjs';
  8. import AutoImport from 'unplugin-auto-import/vite';
  9. import WindiCSS from 'vite-plugin-windicss';
  10. import viteCompression from 'vite-plugin-compression';
  11. import { visualizer } from 'rollup-plugin-visualizer'
  12. const pathSrc = path.resolve(__dirname, 'src');
  13. export default defineConfig({
  14. resolve: {
  15. alias: {
  16. '@/': `${pathSrc}/`,
  17. },
  18. },
  19. plugins: [
  20. vueJsx(),
  21. WindiCSS(),
  22. vue(),
  23. visualizer(),
  24. viteCommonjs(),
  25. // 自动导入vue3的hooks
  26. AutoImport({
  27. resolvers: [ElementPlusResolver()],
  28. imports: ['vue', 'vue-router', 'vuex', '@vueuse/core'],
  29. // 生成路径
  30. dts: path.resolve(pathSrc, 'auto-imports.d.ts'),
  31. }),
  32. //自动导入组件
  33. Components({
  34. resolvers: [
  35. ElementPlusResolver({
  36. importStyle: 'sass',
  37. }),
  38. ],
  39. dts: path.resolve(pathSrc, 'components.d.ts'),
  40. }),
  41. //不知道后端是否支持,暂时注释掉
  42. // viteCompression({
  43. // // gzip静态资源压缩配置
  44. // verbose: true,
  45. // disable: false,
  46. // threshold: 10240,
  47. // algorithm: 'gzip',
  48. // ext: '.gz',
  49. // }),
  50. ],
  51. server: {
  52. watch: { usePolling: true },
  53. open: false,
  54. hmr: true,
  55. /* 设置为0.0.0.0则所有的地址均能访问 */
  56. host: '0.0.0.0',
  57. port: 8080,
  58. https: false,
  59. proxy: {
  60. '/api': {
  61. /* 目标代理服务器地址 */
  62. target: 'http://xxx:9000/',
  63. /* 允许跨域 */
  64. changeOrigin: true,
  65. },
  66. },
  67. },
  68. build: {
  69. outDir: 'JcCloudWeb',
  70. minify: 'terser',
  71. cssCodeSplit: true,
  72. chunkSizeWarningLimit: 1500,
  73. rollupOptions: {
  74. input: 'index.html',
  75. output: {
  76. // 静态资源打包做处理
  77. chunkFileNames: 'assets/js/[name]-[hash].js',
  78. entryFileNames: 'assets/js/[name]-[hash].js',
  79. assetFileNames: 'assets/[ext]/[name]-[hash].[ext]',
  80. manualChunks(id) {
  81. if (id.includes('node_modules')) {
  82. return id.toString().split('node_modules/')[1].split('/')[0].toString();
  83. }
  84. },
  85. },
  86. },
  87. terserOptions: {
  88. // 清除console和debugger
  89. compress: {
  90. drop_console: true,
  91. drop_debugger: true,
  92. },
  93. },
  94. },
  95. });

参考博客:vite打包配置(静态资源合并打包/清除log/gzip压缩/ENV配置等)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/86475
推荐阅读
相关标签
  

闽ICP备14008679号