avatar

麦兜的小站

MDO.INK

  • 首页
  • 随笔
  • 知识库
  • 归档
  • 动态
  • 标签
  • 关于
Home 如何使用Vite缩小打包体积
文章

如何使用Vite缩小打包体积

Posted 2025-02-1 Updated 2025-02- 1
By power 已删除用户
12~16 min read

分析文件依赖其实也可以使用浏览器自带的lighthouse进行网站检测

其实优化的主要难点还是从哪里开始去优化,如果不清楚自己的项目问题出现在哪里,就显得比较盲目,不知道优化哪里,那在优化之前我们先分析一下我文件依赖

  • 安装插件 rollup-plugin-visualizer
plugins:[
     visualizer({ open: true }) 
]
  • 运行打包命令,会自动弹出效果如下

通过该关系图得出依赖之间的关系,与文件大小,可以指定的去优化

指定文件按需加载

比如下面的echarts,这样就不会将整个包加载进来,因为vite自动开启tree-shaking,所以打包的时候只会将LabelLayout, UniversalTransition这两个依赖打进包里(包括组件库也是这种做法)

import { LabelLayout, UniversalTransition } from 'echarts/features';

下面开始运行我们本地打包的命令,查看依赖关系这样我们就可以相对于的优化

路径别名&文件尾缀

 resolve: {
      alias: {
        '@': pathResolve('src') + '/',
        '@views': pathResolve('./src/views') + '/',
      },
      extensions: ['.js', '.vue', '.json'], 
    },

静态资源的打包

 build: {
    rollupOptions: {
      output: {
        chunkFileNames: 'js/[name]-[hash].js',  
        entryFileNames: 'js/[name]-[hash].js',  
        assetFileNames: '[ext]/[name]-[hash].[ext]' 
      }
    }
  }
  • 打包效果

最小化拆分包

将需要分离 的包 单独的打包出来

build: {

    rollupOptions: {
        output: {
            manualChunks(id: any): string {  
                if (id.includes("node_modules")) {
                    return id
                            .toString()
                            .split("node_modules/")[1]
                            .split("/")[0]
                            .toString();
                }
            }
        }
    }
}

关闭一些打包配置项

这个东西一般是在测试阶段调试使用的

build: { 
      terserOptions: {
        compress: {

          drop_console: true,
          drop_debugger: true,
        },
      },

      reportCompressedSize: false,

      sourcemap: false, 
}

低版本浏览器兼容

  1. 安装插件npm i @vitejs/plugin-legacy -D
  legacyPlugin({
      targets: ['chrome 52', 'Android > 39', 'iOS >= 10.3', 'iOS >= 10.3'], 
      additionalLegacyPolyfills: ['regenerator-runtime/runtime'] 
    })

使用CDN

其实使用cdn也有很多中方式,在这里就介绍我在项目中使用的,当然我这种也不是比较好方案,如果你有更好的方案,还请在下面留言

  1. 安装插件 npm install rollup-plugin-external-globals -D
  2. 配置插件比如我们需要吧Vue使用CND的方式引入
rollupOptions: {

        external: ['vue'],
        plugins: [

          externalGlobals({

            vue: 'Vue', 
          }),
        ] 
      },
  1. 配置CDN地址 我们借助vite-plugin-html插件来帮我们自动引入地址
import { createHtmlPlugin } from 'vite-plugin-html';

createHtmlPlugin({
    minify: true,
    inject: {
        data: {
        title: ENV.VITE_APP_TITLE,  
        vuescript:'<script src=""></script>',
        },
     },
    }),
  1. 最后在我们模板页面head部分上写入ejs模板语法
<% vuescript %>
  1. 最后打包完在html文件中会自动将模板替换掉达到下面的效果

开启Gzip

它的主要作用就是缩小打包的体积

  1. 安装插件 npm install vite-plugin-compression -D
  2. 参数
    • filter:过滤器,对哪些类型的文件进行压缩,默认为/.(js|mjs|json|css|html)$/i
    • verbose: true:是否在控制台输出压缩结果,默认为 true
    • threshold :启用压缩的文件大小限制,单位是字节,默认为 0
    • disable : false:是否禁用压缩,默认为 false
    • deleteOriginFile :压缩后是否删除原文件,默认为 false
    • algorithm :采用的压缩算法,默认是 gzip
    • ext :生成的压缩包后缀
viteCompression({
    verbose: true,    
    disable: false,
    threshold: 10240,  
    algorithm: 'gzip',
    ext: '.gz',
    })
  1. 打包输出效果

通过上面可以明显的看出开启Gzip与不开启存在明显的差别

  1. 第三步就是配置我们的Nginx
    server{
        #gzip
        #开启gzip功能
        gzip on; 
        #开启gzip静态压缩功能
        gzip_static on; 
        #gzip缓存大小
        gzip_buffers 4 16k;
        #gzip http版本
        gzip_http_version 1.1;
        #gzip 压缩级别 1-10 
        gzip_comp_level 5;
        #gzip 压缩类型
        gzip_types text/plain application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; 
        gzip_vary on; 



    }
  1. 浏览器输入你的项目地址就可以访问了

如何测试网页性能?

这里我用的是Lighthouse去测试的,这个功能谷歌浏览器是有集成的,所以直接在浏览器上使用就可以,通过选择你自己想要的指标点击生成报告即可。

  • 最后测试部分截图(以下是测试项目的数据)

前端
License:  CC BY 4.0
Share

Further Reading

Jun 25, 2025

Vue实现顶部导航跟随页面联动效果

需求背景 最近也是应我一位同学的要求,给他的公司制作一个官网,那也就是拾起了一些基础的知识,搜索了一些其它的文章有实现这种效果的,但大多导航都是在侧边,然后点击导航对应的部分内容滑到最上面,跟我这次设...

Jun 20, 2025

Share.js - 一键分享到微博、QQ空间、QQ好友、微信、腾讯微博、豆瓣、Facebook、Twitter、Linkedin、Google+、点点

一键分享到微博、QQ空间、QQ好友、微信、腾讯微博、豆瓣、Facebook、Twitter、Linkedin、Google+、点点等社交网站,使用字体图标。 有两种安装方式: 使用npm npmi...

Jun 19, 2025

node express实现热更新

在使用node进行开发的时候,每次修改文件,都需要重启express服务很麻烦 我们可以使用nodemon这个库,修改文件后可以自动重启express服务。 安装: npminstall--save-...

OLDER

vue3+typeScript中使用‘highlight.js’代码高亮组件

NEWER

vue-hisory项目在nginx下的伪静态配置

Recently Updated

  • 如何实现接口幂等性
  • 10个npm工具包
  • How to set up PHP7.4 on MacOS.
  • Automa:一键自动化,网页数据采集与工作流程优化专家Automa:解锁自动化
  • Mac 下用 brew 搭建 LNMP

Trending Tags

thinkphp clippings

Contents

©2025 麦兜的小站. Some rights reserved.

Using the Halo theme Chirpy