前端八股---脚手架工具Vue CLI(Webpack) vs Vite

目录

[一、Vue CLI vs Vite 对比](#一、Vue CLI vs Vite 对比)

[二、Vite 核心特点(面试必说)](#二、Vite 核心特点(面试必说))

[2.1 启动速度极快](#2.1 启动速度极快)

[2.2 热更新超快](#2.2 热更新超快)

[2.3 使用浏览器原生 ES 模块](#2.3 使用浏览器原生 ES 模块)

[2.4 生产环境用 Rollup 打包](#2.4 生产环境用 Rollup 打包)

三、依赖预构建(optimizeDeps)

[3.1 是什么?](#3.1 是什么?)

[3.2 做了哪 3 件事?](#3.2 做了哪 3 件事?)

[3.3 为什么要做预构建?](#3.3 为什么要做预构建?)

[3.4 用什么工具做的?](#3.4 用什么工具做的?)

[3.5 面试标准答案](#3.5 面试标准答案)

五、代码示例

[使用 Vite 创建 Vue 3 项目](#使用 Vite 创建 Vue 3 项目)

[vite.config.js 配置](#vite.config.js 配置)

六、面试高频问题

[Q:Vite 为什么比 Webpack 快?](#Q:Vite 为什么比 Webpack 快?)

Q:什么是依赖预构建?


一、Vue CLI vs Vite 对比

对比项 Vue CLI (Webpack) Vite
启动方式 打包所有文件再启动 不打包,直接启动
启动速度 慢(越大越慢) 极快(秒开)
热更新 慢(需要重新打包) 极快(按需更新)
开发环境 打包成 bundle 原生 ES 模块
生产打包 Webpack Rollup
配置复杂度 复杂 简单
适用场景 老项目 Vue3 新项目首选

二、Vite 核心特点(面试必说)

2.1 启动速度极快

复制代码
Vue CLI (Webpack):
┌─────────────────────────────────────────────────────────┐
│  启动 → 打包所有文件 → 打包完成 → 运行项目                │
│         (耗时 10-30 秒)                                 │
└─────────────────────────────────────────────────────────┘

Vite:
┌─────────────────────────────────────────────────────────┐
│  启动 → 直接运行(不打包)→ 秒开                         │
│         (耗时 < 1 秒)                                   │
└─────────────────────────────────────────────────────────┘

2.2 热更新超快

复制代码
Vue CLI:修改代码 → 重新打包 → 更新页面(慢)
Vite:修改代码 → 只更新改动的模块 → 更新页面(快)

2.3 使用浏览器原生 ES 模块

javascript 复制代码
<!-- Vite 开发环境:直接使用原生 ES 模块 -->
<script type="module">
  import { createApp } from '/node_modules/.vite/deps/vue.js'
  import App from '/src/App.vue'
  // 浏览器直接加载,不打包
</script>

2.4 生产环境用 Rollup 打包

对比 Webpack Rollup
打包体积 较大 更小
Tree-shaking 一般 更优秀
代码冗余 有运行时代码 更简洁
适用场景 开发环境 生产构建

三、依赖预构建(optimizeDeps)

3.1 是什么?

把 node_modules 里的第三方包提前打包、处理好,让 Vite 开发时跑得更快。

3.2 做了哪 3 件事?

工作 说明
CommonJS → ESM require/module.exports 转成 import/export
小文件打包 把 lodash 等几百个小文件打包成一个文件
缓存 缓存结果,下次启动更快

3.3 为什么要做预构建?

复制代码
不做预构建:
浏览器请求 node_modules/xxx → 可能几百个请求 → 页面卡顿

做了预构建:
浏览器请求 → 几个大文件 → 飞快加载

3.4 用什么工具做的?

esbuild - 用 Go 写的,比 Webpack 快 10~100 倍

3.5 面试标准答案

依赖预构建是 Vite 启动时,通过 esbuild 对 node_modules 第三方依赖进行提前处理:

  1. 将 CommonJS 模块转换为浏览器支持的 ESM 模块

  2. 将分散的小文件打包成少量文件,减少 HTTP 请求

  3. 缓存结果,提升二次启动速度

目的是让开发环境加载更快、更稳定。

五、代码示例

使用 Vite 创建 Vue 3 项目

javascript 复制代码
# 创建项目
npm create vite@latest my-app -- --template vue

# 进入项目
cd my-app

# 安装依赖
npm install

# 启动开发服务器
npm run dev

# 打包生产
npm run build

vite.config.js 配置

javascript 复制代码
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

export default defineConfig({
  plugins: [vue()],
  server: {
    port: 3000,
    proxy: {
      '/api': {
        target: 'http://localhost:8080',
        changeOrigin: true
      }
    }
  },
  build: {
    outDir: 'dist',
    sourcemap: false
  },
  optimizeDeps: {
    include: ['vue', 'axios', 'element-plus']  // 预构建的依赖
  }
})

六、面试高频问题

Q:Vite 为什么比 Webpack 快?

答:

  1. 启动方式不同:Webpack 需要打包所有文件才能启动;Vite 不打包,直接启动,按需加载

  2. 利用原生 ES 模块 :Vite 开发环境直接使用浏览器原生 import/export,无需打包

  3. 依赖预构建:用 esbuild 预处理第三方依赖,esbuild 比 Webpack 快 10-100 倍

  4. 热更新机制:Vite 只更新改动的模块,不重新打包

Q:什么是依赖预构建?

答:

依赖预构建是 Vite 启动时对 node_modules 中的第三方依赖进行预处理:

  • 将 CommonJS 格式转为浏览器支持的 ESM 格式

  • 将多个小文件合并成少量文件,减少 HTTP 请求

  • 缓存结果,加快二次启动速度

使用 esbuild 实现,速度极快。

相关推荐
郭老二31 分钟前
【前端】vue3:编译步骤
前端
不在逃避q1 小时前
Trae/Vs Code/Cursor命令行无法跑npm命令
前端·arcgis·npm
夏殇之殁2 小时前
包中创建自定义列表项。 . 使用自定义列表项进行数据绑定 . 将天气预报数据保存到本地内存表,通过LiveBindings进行显示。 ...
服务器·前端·javascript
The Chosen One9852 小时前
高进度算法模板速记(待完善)
java·前端·算法
陈随易2 小时前
MoonBit抓包模块pcap,查看电脑的每一次联网通信
前端·后端·程序员
新中地GIS开发老师3 小时前
WebGIS开发学生作品|低空航天管理与航线规划系统
前端·javascript·webgis·三维gis开发
用户059540174463 小时前
大模型对话记忆持久化踩坑实录:用 Playwright 自动化测了 300 次,终于揪出会话丢失的真凶
前端·css
丙氨酸長鏈3 小时前
Web前端入门第 问:JavaScript 一个简单的 IndexedDB 数据库入门示例
前端·javascript·数据库
kyriewen4 小时前
面试官让我手写虚拟列表——AI生成的版本,快速滚动几下就白屏了
前端·javascript·面试
IT_陈寒4 小时前
Vite热更新失效?你可能漏了这个配置
前端·人工智能·后端