上述可以看到 sass-loader 的构建时间有 1.56s,占据了整个构建过程的 60%,那么有没有方法来加快 sass-loader 的构建速度呢?
可以通过多进程来实现,试想将 sass-loader 放在一个独立的 worker 池中运行,就不会阻碍其他 loader 的构建了,可以大大加快构建速度。
5.1 thread-loader
通过 thread-loader 将耗时的 loader 放在一个独立的 worker 池中运行,加快 loader 构建速度。
安装:
npm i -D thread-loader
webpack.common.js 配置方式如下:
module.exports = {rules: [{test: /\.module\.(scss|sass)$/,include: paths.appSrc,use: ['style-loader',{loader: 'css-loader',options: {modules: true,importLoaders: 2,},},{loader: 'postcss-loader',options: {postcssOptions: {plugins: [['postcss-preset-env',],],},},},// 配置SASS多线程解析{loader: 'thread-loader',options: {workerParallelJobs: 2}},'sass-loader',].filter(Boolean),},]}
webpack 官网 提到 node-sass 中有个来自 Node.js 线程池的阻塞线程的 bug。 当使用 thread-loader 时,需要设置 workerParallelJobs: 2。
由于 thread-loader 引入后,需要 0.6s 左右的时间开启新的 node 进程,本项目代码量小,可见引入 thread-loader 后,
构建时间反而增加了0.19s。
因此,我们应该仅在非常耗时的 loader 前引入 thread-loader。

happypack ❌
happypack 同样是用来设置多线程,但是在 webpack5 就不要再使用 happypack 了,官方也已经不再维护了,推荐使用上文介绍的 thread-loader。
