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

相关推荐
Csvn18 小时前
OpenSpec 详细使用教程
前端
之歆19 小时前
Day19_LESS 完全指南——从入门到工程实践
前端·css·less
云水一下19 小时前
HTML5 从入门到精通:实战收官——从零搭建完整静态网站,综合运用所有知识
前端·html5
不总是20 小时前
Windows 系统 Node.js 免安装版(zip)安装与配置教程(2026 最新)
前端·windows·node.js
冬奇Lab20 小时前
每日一个开源项目(第105篇):Twenty - 跳出 Salesforce 的圈套,定义现代开源 CRM
前端·后端·开源
zhangyao94033021 小时前
开发pc端时,表格的高度怎么设置才能铺满页面
前端·javascript·elementui
kjs--21 小时前
浏览器书签执行脚本
前端
之歆21 小时前
Day16_JavaScript 轮播图与事件工程实战(下篇)
服务器·开发语言·前端·javascript·网络·性能优化
沄媪21 小时前
CSRF 跨站请求伪造
前端·ctf·csrf
kyriewen1 天前
我关掉了Copilot:因为我写的代码出现在了别人的建议里
前端·javascript·ai编程