Webpack 简介
Webpack 是一个模块打包工具,广泛应用于现代前端开发中。它能够将各种静态资源(如 Javascript、CSS、图片等)进行模块化处理,并最终打包成浏览器可识别的文件。
Webpack 优化配置推荐
React 移动端项目中的 Webpack 优化配置
静态资源优化
- CSS 抽离与压缩:使用
mini-css-extract-plugin
抽离 CSS 文件,并通过 optimize-css-assets-webpack-plugin
进行压缩。 - JS 压缩:采用
terser-webpack-plugin
结合 optimization.minimizer
对 Javascript 文件进行压缩。
代码分割
- 动态导入:利用
Dynamic Imports
实现按需加载,chunkFilename
设置确保生成的 bundle 文件以 ID 和 hash 的形式命名。 - 模块拆分:通过
optimization.splitChunks
对模块进行拆分,减少重复代码。
构建范围控制
- 路径过滤:使用
include/exclude
选项限制编译范围。 - 别名解析:配置
resolve.alias
和 resolve.extensions
提高模块解析效率。
缓存机制
- Babel 缓存:启用
babel-loader
的 cachedirectory
选项,加速二次构建。
按需加载
- 组件与库:对于大型第三方库(如
antd-mobile
),建议实现按需加载以减小包体积。
性能优化
- 大文件处理:将大图片和视频上传至云服务器,避免影响打包速度。
- CDN 引入:优先考虑使用 CDN 加载常用第三方库,如百度 CDN。
- 图片压缩:引入
image-webpack-loader
对图片进行无损压缩。 - CSS 清理:移除未使用的样式,借助
purgecss-webpack-plugin
并配置白名单确保重要样式不被误删。 - Gzip 压缩:通过
CompressionWebpackPlugin
启用服务端 Gzip 压缩。 - 多线程打包:采用
thread-loader
实现多进程/多实例打包,提升打包效率。 - DLL 打包:利用
webpack.dll.js
, DllPlugin
, DllReferencePlugin
及 manifest.json
实现 DLL 打包。 - 作用域提升:在生产环境中启用
scope hoisting
减少模块依赖。 - 动态 Polyfill:基于用户代理信息动态加载所需的 Polyfill。