Vue2 结合 Webpack 的打包原理可以理解为将多个模块(包括 Vue 组件、JavaScript、CSS、图片等资源)经过一系列处理后,最终合并为浏览器可直接运行的静态文件的过程
Webpack 以 entry(通常是 main.js)作为打包入口,递归解析所有依赖关系 --构建出依赖关系树
Webpack 本身只能处理 JavaScript 和 JSON 文件,对于其他类型的模块(尤其是 Vue 组件),需要通过 Loader 进行转换:
通过 vue-loader 解析 .vue 文件,将其拆分为 template(模板)、script(脚本)、style(样式) 三部分,再分别交给对应的 Loader 处理:
- template:由
vue-template-compiler 编译为渲染函数(render 函数),最终转换为 JavaScript 代码。
- script:通过
babel-loader 将 ES6+ 语法转换为 ES5(兼容旧浏览器),同时处理 Vue 组件的逻辑代码。
- style:通过
css-loader 解析 CSS 依赖,vue-style-loader 或 mini-css-extract-plugin 处理样式注入(开发环境注入到 <style> 标签,生产环境提取为单独 CSS 文件),支持 sass-loader 等预处理器
Webpack 将处理后的 Chunk 输出到 output 配置指定的目录(通常是 dist),生成最终可运行的静态文件:
- JavaScript 文件:如
app.[hash].js(业务代码)、vendors.[hash].js(第三方库)。
- CSS 文件:生产环境下通过
mini-css-extract-plugin 提取为 app.[hash].css 等单独文件。
- HTML 文件:通过
html-webpack-plugin 基于 public/index.html 模板生成,自动注入打包后的 JS/CSS 资源。
- 静态资源:图片、字体等文件输出到
dist/img、dist/fonts 等目录。
入口文件(main.js)
↓
解析依赖(构建依赖树:Vue组件、JS、CSS等)
↓
Loader转换(vue-loader处理组件,babel处理JS,css-loader处理样式等)
↓
合并与优化(生成Chunk,代码压缩、分割、Tree-shaking等)
↓
输出静态文件(dist目录:JS/CSS/HTML/图片等)