共计 1179 个字符,预计需要花费 3 分钟才能阅读完成。
# 基于流程了解 webpack | |
## 一、概述 | |
- 目的:自动化构建代码 | |
- 流程:1. 搜索所有依赖模块 | |
2. 解析模块 | |
3. 打包 | |
4. 再次打包 | |
- 环境:开发环境、测试环境、生产环境 | |
## 二、流程概览 | |
### 0、整个构建 | |
主要配置项 | |
- entry:入口文件 | |
- resolve:搜索匹配规则 | |
- module.rules:解析规则 | |
- plugins:插件功能 | |
- optimization:优化构建的项目 | |
- output:输出文件及相关配置 | |
- devServer:本地开发及相关配置(用于开发环境)其它 | |
- 记录构建耗时:speed-measure-webpack-plugin | |
- 添加运行时的环境变量:webpack.definePlugin、dotenv-webpack | |
- 动态生成包含资源路径的 html:html-webpack-plugin | |
### 1、搜索所有依赖模块 | |
该阶段主要通过配置项 entry 为入口文件,确定所有依赖的模块构成依赖树 | |
- 减小搜索的范围:配置项 resolve | |
### 2、解析模块 | |
- 减少不必要的解析:为 loader 添加 exclude | |
- 提取 css 并生成 source map:mini-css-extract-plugin | |
- 语法编译:babel-loader | |
- 优化开销大的解析:thread-loader(多线程解析)### 3、打包 | |
- 减少单个包的大小,按需加载的支持:optimization.(splitChunks、runtimeChunk) | |
- 提高压缩速度:terser-webpack-plugin(多线程压缩)- 压缩 css:optimize-css-assets-webpack-plugin | |
- 将静态资源复制到打包文件夹:copy-webpack-plugin | |
### 4、再次打包 | |
- 将第三方的文件缓存:webpack.HashedModuleIdsPlugin、dll(需添加 dll 配置文件)## 三、名词注解 | |
- 运行时(runtime):构建生成的项目处于运行状态时 | |
- output.publicPath:作用于构建的项目的打包资源的路径前缀,如:打包文件名 't/test.js',publicPath='./a/',结果为 "./a/t/test.js";publicPath='http://cdn.test.com/app',结果为 'http://cdn.test.com/app/t/test.js' | |
- devServer.publicPath:启动的开发服务器基于 publicPath 的值提供服务 | |
- hash:默认基于当次构建动态生成 id,然后基于构建内容生成 hash,可通过 webpack.HashedModuleIdsPlugin 基于文件的相对路径生成 id,避免内容不变 hash 改变 | |
- chunkhash:针对每个拆分的 chunk 的内容生成的 hash | |
- contenthash:一般用于 css 文件 |
正文完
发表至: javascript
2020-05-26