Webpack5文件压缩

Posted IT人.阿标

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Webpack5文件压缩相关的知识,希望对你有一定的参考价值。

文章目录

html压缩

HtmlWebpackPlugin` 简化了 HTML 文件的创建,以便为你的 webpack 包提供服务。这对于那些文件名中包含哈希值,并且哈希值会随着每次编译而改变的 webpack 包特别有用。你可以让该插件为你生成一个 HTML 文件,使用 lodash 模板提供模板,或者使用你自己的 loader

同事HtmlWebpackplugin也支持html文本压缩,通过配置参数来达到各种压缩配置。

安装插件:

npm i -D html-webpack-plugin

基本用法:配置webpack.config.js

const HtmlWebpackPlugin = require('html-webpack-plugin');
const path = require('path');

module.exports = 
  entry: 'index.js',
  output: 
    path: path.resolve(__dirname, './dist'),
    filename: 'index_bundle.js',
  ,
  plugins: [
        new HtmlWebpackPlugin(
            scriptLoading: module,
            //本地模板文件的位置,支持加载器(如handlebars、ejs、undersore、html等)
            template: path.join(__dirname, 'default_index.ejs'),
            filename: 'index.html',//filename: 'index.html'
            hash: false,
            inject: true,
            compile: true,
            favicon: false,//添加特定favicon路径到输出的html文档中
            minify: false,//使用html压缩
            cache: true,//true|fasle, 默认true; 如果为true表示在对应的thunk文件修改后就会emit文件
            showErrors: true,
            chunks: 'all',//允许插入到模板中的一些chunk,不配置此项默认会将entry中所有的thunk注入到模板中
            excludeChunks: [],//这个与chunks配置项正好相反,用来配置不允许注入的thunk。
            title: 'Webpack App',生成的html文档的标题
            xhtml: false
        ),
    ],
;

CSS压缩

webpack5在配置css压缩依赖于两个插件:

  • mini-css-extract-plugin

    将css单独打包成一个文件的插件,它建立在新的 webpack v5 功能之上,需要 webpack 5 才能工作

  • css-minimizer-webpack-plugin

    这个插件使用 cssnano 优化和压缩 CSS。

安装插件:

npm i -D mini-css-extract-plugin
npm i -D css-minimizer-webpack-plugin

基本用法:

module.exports = 
  module: 
    rules: [
      
        test: /.s?css$/,
        use: [MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader'],
      ,
    ],
  ,
  optimization: 
    minimizer: [
      new CssMinimizerPlugin(),
    ],
  ,
;

JS压缩

webpack4中内置了uglifyjs-webpack-plugin这个插件,在webpack5中则内置使用’terser-webpack-plugin’这个插件对代码进行压缩(本文主要介绍以webpack5为例)。

Webpack在生产模式默认开启这个插件,所以我们默认打包的js文件以及是压缩过的。当然我们也可以手动安装一下这个插件并且手动设置一个参数,去做一些并行压缩之类的事情;

基本用法:

在webpack5中,我们不需要手动安装terser-webpack-plugin,只需要配置optimization即可:

optimization: 
  minimize: true, // 可省略,默认最优配置:生产环境,压缩 true。开发环境,不压缩 false
  minimizer: [
      new TerserPlugin(
                test: /\\.js(\\?.*)?$/i,  //用来匹配需要压缩的文件。通常可以配置min.js来过滤一些已经压缩过的js文件避免重复压缩导致问题
                include: undefined, //正则表达式,匹配参与压缩的文件。
                exclude: undefined //正则表达式,匹配不需要压缩的文件
                parallel: true, //使用多进程并发运行以提高构建速度。 并发运行的默认数量: os.cpus().length - 1 。
                minify: false, //允许你自定义压缩函数。 默认情况下,插件使用 terser 库。 对于使用和测试未发布的版本或 fork 的代码很帮助。

        terserOptions: 
              toplevel: true, // 最高级别,删除无用代码
              ie8: true,
              safari10: true,
          
      )

常遇坑位介绍

  1. 我们在配置插件的时候有的是配置在optimization.minimizer中,有的是配置在plugin中,区别是什么?

    配置在「plugins」中,webpack就会在启动时使用这个插件。而配置在 「optimization.minimizer」 中,就只会在「optimization.minimize」这个特性开启时使用。所以webpack推荐,像压缩类的插件,应该配置在「optimization.minimizer」数组中。以便于通过「optimization.minimize」统一控制。(生产环境会默认开启minimize)

  2. 我们明明配置了optimization.minimizer为true ,但是为什么还是没有被压缩(无效)

    原因是webpack认为,如果配置了minimizer,就表示开发者在自定以压缩插件,无论是配置minimizer是TRUE还是FALSE,内部的JS压缩器就会被覆盖掉。所以这里还需要手动将它添加回来。webpack内部使用的JS压缩器是「terser-webpack-plugin」。

    只有没有显示配置minimizer情况下,默认才是true压缩的。

以上是关于Webpack5文件压缩的主要内容,如果未能解决你的问题,请参考以下文章

Webpack5文件压缩

Webpack5文件压缩

老vue项目webpack3升级到webpack5全过程记录

webpack5以上版本 使用optimize-css-assets-webpack-plugin压缩问题

个人笔记2023年搭建基于webpack5与typescript的react项目

从构建进程间缓存设计谈Webpack5 优化和工作原理