webpack
1. 基本编译配置
- html编译(
HtmlWebpackPlugin
) - css编译
- less编译(
less-loader
) - scss编译(
scss-loader
) - vue样式编译(
vue-style-loader
) - css编译(
css-loader
、style-loader
) - 多浏览器兼容(
postcss-loader
)
- less编译(
- js编译
- vue编译(
vue-loader
) - react编译(
babel-loader
) - babel-loader
- 预设,比如箭头函数转为function(
@babel/preset-env
、@babel/preset-react
) - 新语法补丁polyfill,比如(
core.js
,generator
) - 按需引入polyfill(
useBuiltIns
、corejs
) - 是否是第三方库,写页面无需配置(
run-time
)
- 预设,比如箭头函数转为function(
- vue编译(
- img编译(
file-loader
)
2. 开发环境编译配置
- 热更新,热部署(
HotModuleReplacementPlugin
) - 加速编译dll(
webpack/lib/DllPlugin
、webpack/lib/DllReferencePlugin
) - html、css、js、img按照基本配置
3. 生产环境编译配置
- html编译压缩+hash(
HtmlWebpackPlugin
) - css编译压缩+hash
- 抽离并hash(
MiniCssExtractPlugin
) - 压缩css(
TerserJSPlugin
,OptimizeCSSAssetsPlugin
)
- 抽离并hash(
- js编译压缩+hash
- 抽离公共代码(
splitChunks
) - 忽略不常更新的包,比如react.min.js(
noParse
) - 删除包内不需要的,比如只留moment的中文包(
IgnorePlugin
) - 多进程打包、压缩(
HappyPack
、UglifyJS
) - 删除无用js(
treeshaking
自带) - 减少闭包scopeHosting(
ModuleConcatenationPlugin
)
- 抽离公共代码(
- img编译压缩(
url-loader
)
webpack优化
- 优化构建速度:
- 优化babel-loader 开启缓存,明确范围、
- IgnorePlugin忽略包内部分文件,比如moment的/locale目录,只要手动导入中文包即可
- noParse忽略对完整的min包,比如已有react.min.js,不需要重复打包、
- happyPack开启多进程打包,提高构建速度、
- ParallelUgifyPlugin开启多进程压缩js、
- 自动刷新watchOptions、热更新devServe、不能用于生产环境
- DllPlugin动态链接库插件,vue和react体积大但是不常升级版本,一个版本构建一次就可
- 优化产出代码:
- 使用生产环境pro命令,vue和react会自动去除警告,启动代码压缩,启动tree-shaking、
- 小图片base64编码、
- bundle和hash、
- 使用CDN
- 提取公共代码、
- 懒加载配合动态组件、
- scope hosting减少闭包
- IgnorePlugin忽略包内部分文件