人人都会AI编程

插件体系、按需加载、预构建优化

更新时间:2026-07-11

Vite 之所以快,不只是因为用了原生 ES 模块,更在于它围绕开发体验做了一系列务实的工程设计。其中插件体系按需加载预构建优化,是决定项目可维护性和构建性能的三大支柱。


插件体系:用插件扩展 Vite 的能力边界

Vite 本身只提供最核心的构建和开发服务器能力,所有非核心功能都通过插件来实现,包括对 Vue 单文件组件的支持(@vitejs/plugin-vue)、TypeScript 编译、CSS 预处理等。这种设计让 Vite 的内核保持轻量,而功能边界由插件决定。

实用原则

  • 插件是标准的 npm 包,在 vite.config.js 中通过 plugins 数组引入,多数插件提供零配置选项。
  • 对于 Vue 项目,@vitejs/plugin-vue 是必须的,它负责将 .vue 文件编译为 JS 和 CSS。
  • 常见的官方及社区插件包括:
  • @vitejs/plugin-vue-jsx:支持 JSX 语法。
  • vite-plugin-pages:基于文件系统自动生成路由。
  • unplugin-auto-import:自动导入 Vue API 等,减少手动 import。
  • vite-plugin-compression:构建时生成 gzip/brotli 压缩文件。

真实体感
当你需要一个能力(比如自动导入组件),不需要修改 Vite 源码或等官方更新,只需安装一个插件并配置。这与 Vue 本身的渐进式思路一致——按需装载,避免了“全家桶”的臃肿。


按需加载:只把当前页面需要的代码交给用户

“按需加载”并非一个独立配置项,而是一种贯穿开发与构建环节的策略,用于保证最终产物体积最小

对组件库的按需引入
像 Element Plus、Ant Design Vue 等大型组件库,全量引入会让打包体积轻松膨胀数 MB。它们的官方文档都提供了对应的按需引入方案,通常借助 unplugin-vue-components 插件即可实现:

// vite.config.js
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

export default {
  plugins: [
    Components({
      resolvers: [ElementPlusResolver()]
    })
  ]
}

配置后,你用 <el-button> 时插件会自动导入对应组件的 JS 和样式,其余 99% 的组件不会打进最终包。同样的模式也适用于自定义的组件库和工具函数库(如 lodash 的 lodash-es + Tree Shaking)。

路由级别的代码分割
Vue Router 配合动态 import() 天然支持路由级别的懒加载:

const UserProfile = () => import('./views/UserProfile.vue')

这样该页面的所有 JS、CSS 和组件依赖都会被独立打包,只有当用户真正访问该路由时才会请求这段代码。这是大型 SPA 首屏优化的基本操作,无需额外插件。

组件级的异步加载
对于体积较大但并非首屏必需的组件(如富文本编辑器、图表),可以用 defineAsyncComponent 实现点击或可见时才加载:

import { defineAsyncComponent } from 'vue'
const Chart = defineAsyncComponent(() => import('./HeavyChart.vue'))

这些策略共同构成“按需加载”体系,核心目的只有一个:让用户下载的代码刚好够用,不多不少


预构建优化:把“慢”的东西提前处理好

开发时,Vite 在冷启动阶段会执行依赖预构建,它解决了两个关键问题:

  1. 将 CommonJS 模块转为 ESM

Vite 的开发服务器基于原生 ES 模块,但许多 npm 包(如 lodash、axios)仍提供 CommonJS 格式。Vite 会用 esbuild 将它们统一转化成 ESM,并合并成一个文件,避免浏览器发出密密麻麻的请求。

  1. 重写裸模块导入路径

代码中 import { ref } from 'vue' 这种“裸模块”浏览器无法解析。预构建时 Vite 会把这些引用重写为如 /node_modules/.vite/deps/vue.js?v=... 的合法路径,同时处理依赖间的深层次引用。

为什么预构建优化对开发速度重要
一些包内部可能包含成百上千个内部模块(比如 lodash-es),如果不做合并,浏览器在加载一个组件时可能会产生数百个请求,导致开发服务器卡顿。预构建后,这些包被合并成少量文件,结合 HTTP/2 的多路复用,请求效率大幅提升。

缓存策略
预构建的结果会被缓存到 node_modules/.vite 目录下。除非依赖版本变化或配置调整,否则 Vite 只会执行一次预构建。二次启动时几乎瞬间就绪。

对生产构建的影响
预构建是开发时的概念,生产打包则由 Rollup 接管。但 Vite 插件生态中常用的 unplugin-vue-componentsunplugin-auto-import 等会在生产构建时继续工作,保证按需加载策略从开发到上线一致。


总结一句话:Vite 用插件让扩展变得随意,用按需加载让产物保持小巧,用预构建让开发反馈迅捷——这三者结合起来,就是现代 Vue 项目“开箱即快”的工程基础。