目录:1、速度剖析2、cdn分包3、多过程构建4、放大构建范畴5、应用缓存

1、打包速度剖析
在进行打包速度优化之前,须要对以后我的项目每个局部的打包工夫理解分明。

咱们借助 speed-measure-webpack-plugin 插件,它剖析 webpack 的总打包耗时以及每个 plugin 和 loader 的打包耗时,从而让咱们对打包工夫较长的局部进行针对性优化。

通过以下命令装置插件:

yarn add speed-measure-webpack-plugin -D

再次build就能看到各个局部的打包耗时


2、CDN分包
之前对打包体积进行剖析的时候,发现react-dom、react是占据体积十分大的几个包,在打包这些包的时候就十分耗时。cdn分包能够让咱们在打包过程中将特定包分离出来,从而晋升打包速度。

排除局部库的打包须要借助 html-webpack-externals-plugin 插件,执行如下命令装置:

yarn add html-webpack-externals-plugin -D

然而如果Webpack的版本过高,装置可能呈现版本抵触:

能够先用 --force命令强制装置,等呈现抵触问题再卸载解决。

能够发现应用cdn分包,构建速度快了2s左右


3、多过程构建
对于耗时较长的模块,同时开启多个 nodejs 过程进行构建,能够无效地晋升打包的速度。能够采取的一些形式有:

thread-loader
HappyPack(作者曾经不保护)
parallel-webpack

本文采纳thread-loader进行多过程构建。

yarn add thread-loader -D

更改webpack.config.js对应loader的rules局部,须要留神的是,该条rule须要放在其余rule的上方。

module: {      strictExportPresence: true,      rules: [        // 多过程构建        {          test: /.js$/,          include: path.resolve('src'),          use: [            "thread-loader",            // 耗时的 loader (例如 babel-loader)          ],        },

理论打包工夫又优化了2s。

4、放大构建范畴
构建过程是默认全局查找,这十分的耗时。通过手动配置rules中的文件查找范畴,能够缩小打包的范畴,从而晋升打包的速度。
在webpack.config.js文件中如下配置:

module.exports = {  // ...  module: {    rules: [      {        test: /\.js$/,        use: ['babel-loader'],        exclude: /node_modules/,      },    ],  },};

因为babel-loader对文件的转化是十分耗时的,所以放大构建范畴首先就是放大须要babel-loader解决的文件范畴。

能够通过 test 、 include 、 exclude 三个配置项来命中 Loader 要利用规定的文件,用include去命中须要被babel-loader解决的文件,exclude去排除不须要被解决的文件,从而放大了 Loader 解决文件的范畴。


5、应用缓存

通过应用缓存机制能无效晋升二次打包速度。目前webpack5 内置了 cache 模块,缓存生成的 webpack 模块和 chunk,来改善构建速度。它在开发环境下会默认设置为 type: 'memory' 而在生产环境中被禁用。能够通过设置 cache: { type: 'filesystem' } 来凋谢更多配置项。

比方我在webpack.config.js中如下配置:

module.exports = {  cache: {    type: 'filesystem',  },};

那么第一次打包后,就会在node_modules文件夹上面生成一个cache文件夹,从而第二次打包速度显著晋升。