← 返回软件技术总览 软件技术 · 知识点深化 · 前端构建工具:Webpack、Vite、Tree Shaking、Loader
软件技术 · 知识点深化 · 前端工程化

前端构建工具:Webpack、Vite、Tree Shaking、Loader

前端代码要经过打包、转译、压缩、拆包才能上线。Webpack 用 Loader 和 Plugin 做全流程,Vite 用浏览器原生 ESM 开发秒启。这一页讲透构建流程、Tree Shaking、热更新。

① 怎么学(4 步走,约 65 分钟)

先建立直觉再抠细节,按这四步走最稳:

1看图建立直觉(10 分钟)
读②③:先在脑子里画出本课核心结构图。
2记完整体系(15 分钟)
读④:把对比表和公式看懂,不要急着背。
3跟例题走一遍(20 分钟)
精读⑤:看三个例题怎么用知识点解题。
4刷题纠错(剩余时间)
做⑦⑩,错题回⑥诊断。
本课小目标学完你要能:① 说 Webpack 构建流程;② 对比 Webpack/Vite;③ 解释 Tree Shaking;④ 配置代码拆分。

② 一图看懂:前端构建全景

构建工具 Entry/Output 入口出口 Loader 转译文件 Plugin 生命周期钩子 Vite ESM 秒启 应用:打包/热更新 生产部署 易错:打包体积过大 代码分割+压缩
读法:中心是本课主题,四条分支展开核心维度,下方是典型应用与高频易错点。

③ 本质直觉:构建就是"料理食材"

你写的是 .vue/.ts/.scss 文件,浏览器看不懂。构建工具像厨房:把食材(源码)洗切炒(转译)、打包成菜(bundle)端给浏览器。

Webpack:从入口开始递归找依赖,每个文件用对应 Loader 转译(babel 转 ES5、sass 转 css),Plugin 在生命周期做额外事(压缩、抽离 CSS)。

Vite:开发环境不打包,浏览器原生 ESM 按需加载,秒启。生产用 Rollup 打包。

Tree Shaking:删掉没用到的 export 代码,减小体积。依赖 ES Module 静态结构。

入口index Loaderbabel/sass Bundle压缩拆分 依赖图 -> 转译 -> 输出
代码分割把 vendor(react)和业务代码分开,路由懒加载。用户首屏只加载必要代码。

④ 完整知识体系

Webpack vs Vite

维度WebpackVite
开发启动冷启动慢(全打包)秒启(ESM)
热更新随项目变大变慢快
生产打包WebpackRollup
配置复杂简单
生态成熟快速成长
Tree Shaking依赖 ES Module import/export 静态分析,删未引用代码
代码分割splitChunks 抽公共包,动态 import 懒加载路由

Loader vs Plugin

Loader 转译单个文件(babel-loader、css-loader)。Plugin 跑生命周期钩子,做整体事(HtmlWebpackPlugin、压缩)。

⑤ 应用场景与例题

例1 为什么 Vite 开发启动快?
开发环境不打包,浏览器请求哪个模块就实时编译哪个,利用原生 ESM。Webpack 要先全量打包。
例2 Tree Shaking 为什么要用 ES Module?
import/export 是静态的,编译期能分析依赖。CommonJS require 动态,分析不了。
例3 首屏加载慢怎么优化?
路由懒加载动态 import、vendor 抽离、gzip、Tree Shaking。
做题心法构建 = 依赖图 + Loader 转译 + Plugin 增强 + 输出优化。

⑥ 高频错误诊断(4 条)

错误1:生产不压缩代码体积大,加载慢。
错误2:所有代码打一个包改一行业务代码整个 vendor 重新下载。
错误3:用 CommonJS 导致 Tree Shaking 失效用 ES Module。
错误4:忽视 source map 生产配置可能泄露源码。

⑦ 考点真题演练(5 题)

考点分布

考法出题形式应对
流程问 Webpack 步骤依赖图+Loader+Plugin
Loader/Plugin问区别转译文件 vs 生命周期
Vite问为什么快原生 ESM
Tree Shaking问前提ES Module

真题basic1. Vite 开发环境启动快是因为?

真题mid2. Tree Shaking 依赖?

真题mid3. Loader 的作用是?

真题hard4. 代码分割中动态 import 做什么?

真题hard5. Webpack Plugin 和 Loader 区别?

⑧ 必背知识点卡

流程:入口 -> 依赖图 -> Loader -> Plugin -> 输出
Loader:转译单文件 babel/sass
Plugin:生命周期钩子 压缩/html
Vite:开发 ESM 秒启,生产 Rollup
Tree Shaking:删未用代码,要 ES Module
代码分割:vendor 抽离+路由懒加载
HMR:热替换局部模块不刷新整页

⑨ 动手输出:优化前端首屏加载

场景:首屏 5MB 加载 5 秒,怎么优化?
① 分析:用 webpack-bundle-analyzer 看体积。
② 拆分:vendor 单独打,路由懒加载。
③ 瘦身:Tree Shaking、按需引入 UI 库。
④ 压缩:gzip/brotli、图片压缩。
⑤ 缓存:vendor 加 hash 长缓存。
口述思路先分析体积,再拆分压缩缓存。

⑩ 分层练习(基础 + 中档 + 拔高)

▍基础 6 题

基础1Webpack 入口是什么?
从哪个文件开始构建依赖图。
基础2Loader 作用?
转译文件。
基础3Vite 开发为什么快?
原生 ESM 不打包。
基础4Tree Shaking 作用?
删未引用代码。
基础5代码分割好处?
首屏只加载必要代码。
基础6HMR 是什么?
模块热替换。

▍中档 5 题

中档1为什么生产和开发配置不同?
开发要 source map 和 HMR;生产要压缩优化。
中档2babel-loader 干什么?
ES6+ 转 ES5 兼容浏览器。
中档3splitChunks 干什么?
抽离公共依赖到单独 chunk。
中档4为什么用 ES Module 才能 Tree Shaking?
静态结构编译期能分析。
中档5Vite 生产为什么用 Rollup?
Rollup 输出更干净适合库。

▍拔高 5 题

拔高1source map 生产怎么配?
hidden-source-map 只上传错误监控,不公开。
拔高2缓存 hash 策略?
内容变了 hash 才变,长缓存 vendor。
拔高3热更新原理?
WebSocket 通知浏览器替换模块。
拔高4为什么 CommonJS 不能 Tree Shaking?
require 动态,运行时才知道依赖。
拔高5预加载/preload 区别?
preload 当前页面必需;prefetch 未来可能用。

⑪ 记忆口诀 + 7 天复习计划

三句口诀① 入口依赖图,Loader 转译 Plugin 增强。② Vite 秒启靠 ESM,Tree Shaking 要 ES Module。③ 拆分压缩加缓存,首屏秒开。
天任务自检
第 1 天读②③,画 Webpack 流程五步说清
第 2 天背 Loader/Plugin + 基础 6 题概念记住
第 3 天做中档 5 题,配置一个 vite 项目能跑
第 4 天做拔高 5 题,分析 bundle会用 analyzer
第 5 天做⑦真题 5 题限时每题 2 分钟
第 6-7 天合书口述 Tree Shaking 原理不看资料

← 返回软件技术总览