以下内容均整理自 (juejin.cn/post/684490…) 和 (www.cnblogs.com/kidflash/p/…)
构建速度优化:
- 优化loader配置:
缩小文件匹配范围; 缓存loader执行结果:加cacheDirectory(use:’babel-loader?cacheDirectory’); - 优化resolve配置:
优化模块查找路径:转换绝对路径path.join(__dirname,dir) 配置路径别名:alias,精确匹配:$ 解析确定文件后缀:extensions:[‘.js’,’.vue’] - HappyPack:
让webpack对loader的执行从单一进程扩展为多进程 plugins:[ new HappyPack{} ] - DLL动态链接库:
将web应用依赖的基础模块抽离,打包到单独的动态链接库, 一个动态链接库可以包含其他模块调用的函数和数据, 动态链接库只需被编译一次, 依赖的两个内置插件:DllPlugin 和 DllReferencePlugin plugins: [ new webpack.DllPlugin({}) ] 打包生成动态链接库: webpack --config webpack_dll.config.js --mode production 在dist目录下多出动态链接库js文件 在主配置文件中使用动态链接库文件 将动态链接库文件加载到页面中: html-webpack-plugin 产出html文件 html-webpack-include-assets-plugin 将js css资源添加到html中 扩展html插件的功能
构建体积优化:
- sourcemap:
devtool: 'cheap-module-source-map' eval模式虽然可以提高构建效率,但是构建后的脚本较大,因此生产上并不适用。 而source-map 模式可以通过生成的 .map 文件来追踪脚本文件的 具体位置,进而缩小脚本文件的体积,这是生产模式的首选, 并且在生产中,我们需要隐藏具体的脚本信息,可以使用 cheap 和module 模式来达到目的。 - 启用模块热更新 HMR:
允许在运行时更新各种木块,而无需进行完全刷新 devServer: { hot: true // 开启HMR } 添加插件NamedModulesPlugin 和 HotModuleReplacementPlugin - 提取公共代码 与 第三方代码
在webpack4.0 optimization.splitChunks替代了CommonsChunkPlugin - 懒加载(按需加载):
r=>require.ensure([],()=>r(require(‘’))) - 开启Scope Hoisting :
4默认开启,让打包出的代码文件更小,运行更快 - 独立css文件:
mini-css-extract-plugin - 压缩js,html,css文件:
html:new HtmlWebpackPlugin({minify{//压缩html的配置}}) css:new OptimizeCSSAssetsPlugin() - 依赖库分离:
分离第三方依赖库,可以更好的利用浏览器缓存,提升应用性能 optimization: { splitChunks: { cacheGroups: {} } } - 依赖分析:
webpack-bundle-analyzer - Tree Shaking
依赖静态的ES6模块化语法 删除js中用不上的代码