前端八股---脚手架工具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 实现,速度极快。

相关推荐
lilian2333 分钟前
Harmony os 技术实战|拼豆制图27:用单字符编码承载 50 张 70×70 图纸
前端·数据库·华为·harmonyos
CarIise31 分钟前
CSS选择器与样式关联
前端·css·tensorflow
里欧跑得慢2 小时前
CSS 模块化架构的演进:BEM、CSS Modules 到 CSS-in-JS 的反思
前端·css·flutter·web·css-in-js
IT_陈寒2 小时前
Vue的computed属性把我坑惨了,原来我一直用错姿势
前端·人工智能·后端
小灰灰搞电子3 小时前
Rust+Slint 实现温度计源码分享
前端·rust·slint
计算机魔术师3 小时前
面壁智能 OpenBMB 推出 MathForm,面向 Lean 4 数学自动形式化的开源框架、数据集与模型
前端
NeilCarmack3 小时前
Deepseek-harness增加桌面版端序列:第 2 讲 · spawn Electron:当前进程如何“交棒“
前端·javascript·electron
上海魁鲸科技有限公司4 小时前
APS高级排产系统到底有什么用?一文讲清功能、选型与落地建议
前端·microsoft·excel
陈随易4 小时前
Bun v1.4 更新总结:把浏览器、图片、定时任务和工程工具都装进一个运行时
前端·后端·程序员
东风破_5 小时前
TypeScript 高级类型进阶:keyof、Exclude、Record 与类型组合思想
前端·后端·typescript