Vite打包构建优化:从配置到实战,这些设置帮你把项目体积降下来

更新日期: 2026-03-31 阅读: 14 标签: 打包

打包构建优化,说白了就两大块:一是让打包出来的东西更小、更好用,二是让打包这个过程跑得更快。

这篇文章咱们把常用的优化配置挨个过一遍,有代码,有说明,用的时候直接复制改改就行。


准备工作

先说一下环境判断。有些配置只在生产环境才需要,比如关掉sourceMap、代码混淆这些。开发环境要是也搞这些,调试起来就麻烦了。

所以我们在vite.config.ts里先判断一下当前是什么环境:

export default defineConfig(({ mode }) => {
  const env = loadEnv(mode, process.cwd(), 'VITE_')
  // 判断是不是生产环境,后面很多配置会用到
  const isProd = mode === 'prod'

  return {
    // 配置都写在这里
  }
})

代码压缩和混淆

代码压缩就是去掉空格、注释、没用到的代码,把变量名变短,让文件变小。混淆就是让别人看不懂你的代码逻辑。

Vite里用build.minify来控制压缩。有几个选项:

  • esbuild:Vite默认的,压缩速度非常快,但压缩率比Terser差一点。如果你更在意构建速度,用这个就行,啥都不用配。

  • terser:老牌压缩工具,压缩效果好,选项也多,但速度慢一些。对包体积有极致要求的话选这个。

  • false:不压缩。

如果你想用terser,先装依赖:

pnpm add terser -D

然后在vite.config.ts里配置:

export default defineConfig(({ mode }) => {
  const isProd = mode === 'prod'
  
  return {
    build: {
      minify: 'terser',
      sourcemap: !isProd,  // 生产环境关掉sourcemap
      terserOptions: isProd ? {
        compress: {
          drop_console: true,   // 去掉console
          drop_debugger: true,  // 去掉debugger
        },
        mangle: {
          toplevel: true,  // 混淆顶层变量名
          eval: true,      // 混淆eval里的变量
        },
        format: {
          comments: false,  // 去掉注释
        },
      } : {},
    },
  }
})

资源压缩(Gzip)

代码压缩完还不够,还可以再压一层。用Gzip或者Brotli把文件再压小一点,网络传输更快。

用vite-plugin-compression2这个插件,可以自动生成.gz或.br文件。

安装:

pnpm add vite-plugin-compression2 -D

配置:

import { compression } from 'vite-plugin-compression2'

export default defineConfig({
  plugins: [
    compression({
      algorithms: ['gzip'],
      threshold: 10240,  // 超过10KB的文件才压缩
      deleteOriginalAssets: false,  // 不删原文件
    }),
  ],
})

图片优化

图片也是大头。用vite-plugin-image-optimizer可以在打包时自动压缩图片,还能转格式。

安装:

pnpm add vite-plugin-image-optimizer -D

配置:

import { ViteImageOptimizer } from 'vite-plugin-image-optimizer'

export default defineConfig({
  plugins: [
    ViteImageOptimizer({
      png: { quality: 80 },
      jpeg: { quality: 80 },
      webp: { quality: 80 },
    }),
  ],
})

依赖预构建

用optimizeDeps配置一下常用的依赖。Vite在开发服务器启动时会把它们提前构建成ES模块,省得每次都要转,开发体验会好一点。

export default defineConfig({
  optimizeDeps: {
    include: ['vue', 'vue-router', 'pinia', '@vueuse/core'],
  },
})

输出目录配置

规范一下打包出来的目录结构:

export default defineConfig({
  build: {
    outDir: 'dist',           // 输出目录
    assetsDir: 'assets',      // 静态资源目录
    assetsInlineLimit: 4096,  // 小于这个大小的图片转base64
    reportCompressedSize: true, // 打包完显示压缩后的大小
  },
})

CSS代码分割

这个默认就是开的。把CSS按组件拆开,首屏只加载需要的样式,而不是一个巨大的CSS文件。

export default defineConfig({
  build: {
    cssCodeSplit: true,  // 默认就是true,不写也行
  },
})

JS代码分割

通过manualChunks手动指定哪些依赖打包到一起。比如把vue、vue-router、pinia这些核心库打成一个vendor文件,业务代码单独打,这样改业务代码的时候vendor不用重新下载。

export default defineConfig({
  build: {
    rollupOptions: {
      output: {
        manualChunks: {
          vendor: ['vue', 'vue-router', 'pinia'],
        },
      },
    },
  },
})

兼容性处理

如果项目需要跑在老浏览器上,可以用@vitejs/plugin-legacy生成兼容代码。

安装:

pnpm add @vitejs/plugin-legacy -D

配置:

import legacy from '@vitejs/plugin-legacy'

export default defineConfig({
  plugins: [
    legacy({
      targets: ['defaults', 'not IE 11'],
    }),
  ],
})

打包分析

想知道打包出来的东西里什么最大?用rollup-plugin-visualizer生成一个分析图,一目了然。

安装:

pnpm add rollup-plugin-visualizer -D

配置:

import { visualizer } from 'rollup-plugin-visualizer'

export default defineConfig({
  plugins: [
    visualizer({
      filename: 'stats.html',  // 生成的文件名
    }),
  ],
})

跑完打包后,打开生成的stats.html就能看到各个模块的大小占比,哪里该优化一眼就看清了。


最后

上面这些配置,按需取用就行。不是每个项目都要全部加上。

如果项目对加载速度要求高,terser压缩、Gzip、图片优化、代码分割这几个是一定要搞的。如果只是内部工具,可能压缩一下就够了。

还有一点:配置加多了,打包速度会变慢。这是个取舍问题。看项目情况,找到适合自己的平衡点就行。

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/13536

相关推荐

前端js打包工具

打包工具可以更好的管理html,css,javascript,使用可以锦上添花,不使用也没关系。html好比是房子的地基,css和 javascript是房子的建筑材料,这三个部分一起组成个漂亮的房子

webpack如何编译ES6打包

随着ES的普及我们越来越多的开始使用ES6的语法了,当然也随着mvvm框架的流行少不了js模块化,那js模块化又有那些呢?在很早的时候大家都用的命名空间,现在也有人用(库名.类别名.方法名)

前端打包工具对比

四款前端主流的打包工具:grunt , gulp,webpack, rollup,以发布时间为顺序。Grunt:最老牌的打包工具,它运用配置的思想来写打包脚本,一切皆配置,所以会出现比较多的配置项

webpack打包优化的四种方法(多进程打包,多进程压缩,资源 CDN,动态 polyfill)

如今,webpack 毫无疑问是前端构建领域里最耀眼的一颗星,无论你前端走哪条路线,都需要有很强的webpack 知识。webpack 的基本用法这里就不展开讲了。主要探讨一下如何提高 webpack 的打包速度。

vue-cli3.0中自定css、js和图片的打包路径

我们有时候因为一些特殊需求,可能需要将js/css/img等资源文件都打包到根路径下,但vue-cli3.0的路径配置中仅有assetsDir配置项能够配置所有的静态文件所在的文件夹,并不能针对css/js/img等资源文件分别来做设置,那么请看我如何尝试的吧!

webpack4 打包静态资源

准备一个空文件夹,然后执行下列命令:然后创建一个 dist 目录,并在里面创建一个 indedx.html:接着创建一个 src 目录,在里面创建一个 lib 文件夹,创建一个 until.js:再创建 components 文件夹,再写入几个 js:

webpack打包时删除console.log,和debugger

开发过程中我们不可避免的需要console.log调试,然而在上线时如果不删除这些console.log可能会造成内存泄漏,因为console.log出来的变量是不会被GC的,webpack给我们提供了一个非常棒的插件,看代码:

Webpack安装配置及打包详细过程

前端经过漫长的发展,涌现出了很多实践方法来处理复杂的工作流程,让开发变得更加简便,其中,模块化可以使复杂的程序细化成为各个小的文件,而webpack并不强制你使用某种模块化方案,而是通过兼容所有模块化方案让你无痛接入项目

解决webpack引入moment包过大的问题

在vue工程中,在引入moment时,发现build之后的包比不引入moment的包文件大了整整两百多kb,后来发现webpack会把moment的语言包也一起打包

vue实现分环境打包步骤

在新建好的项目中,一般执行npm run build就是打包了,但此时只能打包到一个环境,不同环境需要配置不同的地址,可以手动更改接口的地址,也可以自行配置命令而不需要每次打包进行地址切换

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!