Webpack 静态模块打包工具
自动化构建工具
- Webpack 基于模块化打包工具,适用于大型复杂前端项目构建
- Grunt
- 基于Node、上手容易、插件齐全、社区活跃
- 早期产物: 每次操作都是文件读写
慢
、配置相对繁琐
- Gulp
- 基于任务 工作流
- 配置相对简单、基于文件流操作
快
- Rollup 适用于基础库的打包
- Parcel
Webpack v4
- 初始化合并参数
- run 编译,从 entry 入口,使用 loader 递归编译模块
- 输出资源,根据入口和 Module 之间的依赖关系,组装成一个个包含多个模块的 Chunk,再把每个 Chunk 转换成一个单独的文件 Bundle.
分别介绍 bundle, chunk, module 是什么?
module
是开发中的单个模块,在 webpack 的世界,⼀切皆模块
,⼀个模块对应⼀个⽂件,webpack 会从配置的 entry 中递归地构建一个依赖关系图chunk
代码块,⼀个 chunk 由多个模块组成,⽤于代码的合并和分割Code Splitting
bundle
包,是由 webpack 打包出来的⽂件
loader 加载模块
让 webpack 拥有了加载和解析非 JavaScript 文件的能力
babel-loader 加载 ES2015+ 代码,然后使用 Babel 转译为 ES5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17// npm install -D babel-loader @babel/core @babel/preset-env webpack
module: {
rules: [
{
test: /\.m?js$/,
include: [resolve('src')],
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader?cacheDirectory=true',
options: {
presets: ['@babel/preset-env'],
plugins: ['@babel/plugin-proposal-object-rest-spread']
}
}
}
]
}file-loader 将文件发送到输出文件夹,并返回(相对)URL
url-loader 像 file loader 一样工作,但如果文件小于限制,可以返回 data URL(Base64)
image-loader 加载并且压缩图⽚⽂件
source-map-loader 加载额外的 sourcemap ⽂件,⽅便断点调试
html-loader 导出 HTML 为字符串,需要引用静态资源
css-loader 加载 CSS,⽀持模块化、压缩、⽂件导⼊等特性
style-loader 把 CSS 代码注⼊到 JavaScript 中
eslint-loader 通过 ESLint 检查 JavaScript 代码
vue-loader 加载和转译 Vue 组件
plugin 扩展能力
在 webpack 运行的生命周期中会广播出许多事件,plugin 可以监听这些事件,调用 webpack 提供的 API 改变输出结果
- define-plugin 定义全局变量
- clean-webpack-plugin 清理文件
- html-webpack-plugin 简化 HTML ⽂件创建
- uglifyjs-webpack-plugin 通过 UglifyJS 压缩 ES6 代码
- mini-css-extract-plugin 为每个引入 CSS 的 JS 文件创建一个 CSS 文件, ⽀持
按需加载
- webpack-parallel-uglify-plugin 多核压缩,提⾼压缩速度
- hot-module-replacement-plugin 模块热替换 HMR
- webpack-bundle-analyzer 可视化分析
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 寻梦环游记!