Webpack 基础知识
Webpack 相关问题
Webpack 优化
Webpack 实现
webpack

基础概念
webpack_require
webpack_exports
hash chunkhash contenthash 区别
- hash 整个文件任何代码发生改变 hash 就会改变
- contenthash 自身内容发生改变 才会改变
- chunkhash 同一个 chunk 有发生改变,都会改变
bundle、module、chunk 的区别
- bundle:一个入口文件打包后的文件,
- 每一个文件都是一个 module
- bundle 里的 eval 都是一个 chunk,
webpack_lodaer
webpack插件
babel
预设
1.babel-loader 是 webpack 与 babel 的通信桥梁,不会做把 es6 转成 es5 的⼯作,这部分⼯作需要用到 @babel/preset-env来做 2.@babel/preset-env ⾥包含了 es,6,7,8 转 es5 的转换规则
polyfill
默认的 Babel 只⽀持 let 等⼀些基础的特性转换,Promise 等⼀些还有转换过 来,这时候需要借助@babel/polyfill,把 es 的新特性都装进来,来弥补低版本浏览器中缺失的特性
//index.js 顶部
import "@babel/polyfill";按需加载
//.babelrc
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
//目标环境
"edge": "17",
"firefox": "60",
"chrome": "67",
"safari": "11"
},
"corejs": 2,//新版本需要指定核⼼库版本
"useBuiltIns": "usage"
}
],
"@babel/preset-react"
]
}
useBuiltIns 选项是 babel 7 的新功能,这个选项告诉 babel 如何配置 @babel/polyfill 。 它有三个参数可以使用:
①entry: 需要在 webpack 的⼊⼝⽂件⾥ import “@babel/polyfill” ⼀次。 babel 会根据你的使用情况导⼊垫片,没有使用的功能不会被导⼊相应的垫片。
②usage: 不需要 import ,全⾃动检测,但是要安装 @babel/polyfill 。(试验阶段)
③false: 如果你 import “@babel/polyfill” ,它不会排除掉没有使用的垫片,程序体积会庞⼤。(不推荐)