webpack性能优化

webpack打包优化一般可以从拆包、分块、压缩等方面考虑。

1.speed-measure-webpack-plugin分析打包速度

// 导入速度分析插件
const SpeedMeasurePlugin = require("speed-measure-webpack-plugin");

// 实例化插件
const smp = new SpeedMeasurePlugin();

module.exports = {
  configureWebpack: smp.wrap({
    plugins: [
      // 这里是项目里需要使用到的其他插件
    ]
  })
}

运行打包命令,可以显示打包总耗时

2.webpack-bundle-analyzer体积分析

// 导入速度分析插件
const SpeedMeasurePlugin = require("speed-measure-webpack-plugin");

// 导入体积分析插件
const BundleAnalyzerPlugin = require("webpack-bundle-analyzer").BundleAnalyzerPlugin;

// 实例化速度分析插件
const smp = new SpeedMeasurePlugin();

module.exports = {
    configureWebpack: smp.wrap({
        plugins: [
            // 实例化体积分析插件
            new BundleAnalyzerPlugin()
        ]
    })
}

3.thread-loader优化解析时间

把这个loader放在其他loader之前,在其后面的loader就会在一个单独的woker池运行,开启多线程提高解析速度。

// 导入速度分析插件
const SpeedMeasurePlugin = require("speed-measure-webpack-plugin");

// 实例化插件
const smp = new SpeedMeasurePlugin();
module.exports = {
    configureWebpack: smp.wrap({
        module: {
            rules: [
                {
                    test: /\.js$/,
                    exclude: /node_modules/,
                    use: ['thread-loader', 'babel-loader']
                },
                {
                    text: /\.less$/,
                    exclude: /node_modules/,
                    use: [
                        'style-loader',
                        'thread-loader',
                        'css-loader',
                        'less-loader',
                    ]
                }
            ]
        }
    })
}

备注:thread-loader要放在style-loader之后,原因是thread-loader后的loader没法存取文件,也没法获取webpack的选项配置。

4.terser-webpack-plugin 压缩优化代码

压缩代码并使用多进程来并行运行提高构建速度。

import { Configuration } from 'webpack';

// 导入代码压缩插件
const TerserPlugin = require("terser-webpack-plugin");

const config: Configuration = {
   optimization: {
      minimizer: [
         new TerserPlugin({
              parallel: true // 或者数字
         })
      ]
   }
}

5.cache-loader优化二次打包时间

在性能开销比较大的loader加这个loader,将结果缓存到磁盘。

import { Configuration } from 'webpack';

import { resolve } from 'path'

const config: Configuration = {
   module: {
      rules: [
         {
            test: /\.js$/,
            exclude: /node_modules/,
            use: ['cache-loader', 'thread-loader', 'babel-loader'],
            include: resolve('src')
         },
      ]
   }
}

你可能感兴趣的:(webpack性能优化)