webpack学习(五):webpack4+压缩和提取CSS以及提取公共部分

提取:mini-css-extract-plugin

what?

在过去,如何将 CSS 提取到一个文件中这是 extract-text-webpack-plugin 的工作。不幸的是这个插件与 webpack 4 不太兼容。根据 Michael Ciniawsky 的说法:extract-text-webpack-plugin 的维护已经成为了一个很大的负担,这已经不是第一次因为它的问题,而使升级 webpack 主版本变的而复杂和繁琐。
而在webpack 4+版本我们可以使用mini-css-extract-plugin 插件来解决这些问题。

use?

首先通过运行npm命令进行安装

npm install mini-css-extract-plugin --save-dev

接下来,我们需要在webpack的配置文件中引入

const MiniCssExtractPlugin = require("mini-css-extract-plugin");

然后在scss等样式相关的rules中使用它:

{
   //解析.scss文件
    test: /\.(sa|sc|c)ss$/,
    use: [
        'css-hot-loader',
        MiniCssExtractPlugin.loader,
        "css-loader",
        "sass-loader"
    ]
}

最后,我们需要在plugins中使用

    new MiniCssExtractPlugin({
      filename: "./css/[name].css"                     // 提取出来的css文件路径以及命名
    }),

值得一提的是,最好将mini-css-extract-plugin用于生产模式,因为该插件使用目前会导致HMR功能缺失。因此在平常的开发模式中,我们还是使用style-loader。
保存之后运行npm run build,会发现打包后文件夹已经帮我们把css提取出来:
在这里插入图片描述

到这里我们发现一个问题,结合之前的devtool和devServer以及现在的提取插件,我们会发现在开发模式和生产模式下,我们的webpack配置会有所不同,因此,我们大可将开发模式和生产模式的webpack配置分成两个文件来使用,例如:
在这里插入图片描述

当然,如果对配置文件命名进行修改,我们需要对package.json文件中的build和dev命令进行修改,通过–config引导命令读取相应的配置文件:

  "build": "webpack --progress --config ./config/webpack.prod.js",
   "dev": "webpack-dev-server --open --hot --progress --config ./config/webpack.dev.js"

压缩:optimize-css-assets-webpack-plugin

what?

optimize-css-assets-webpack-plugin用于压缩css文件,它将在webpack构建期间搜索css资源,并将优化/最小化css(默认情况下,它使用cssnano,但可以指定自定义CSS处理器)
它解决了extract-text-webpack-plugin css重复问题:由于extract-text-webpack-plugin仅捆绑(合并)文本块,如果它用于捆绑css,则捆绑包可能具有重复的条目

use?

同上述插件一样,该插件也是需要安装和引入,不再累赘叙述。完成后,我们进行如下使用:

    new OptimizeCssAssetsPlugin({
         assetNameRegExp: /\.css$/g,       //一个正则表达式,指示应优化/最小化的资产的名称。提供的正则表达式针对配置中ExtractTextPlugin实例导出的文件的文件名运行,而不是源CSS文件的文件名。默认为/\.css$/g
         cssProcessor: require('cssnano'), //用于优化\最小化CSS的CSS处理器,默认为cssnano
         cssProcessorOptions: { safe: true, discardComments: { removeAll: true } }, //传递给cssProcessor的选项,默认为{}
         canPrint: true                    //一个布尔值,指示插件是否可以将消息打印到控制台,默认为true
    }),

保存,运行build命令,会发现打包后的css文件已被压缩

提取公共部分:optimization

what?

当我们在编写多入口文件的项目时,难免在不同的入口文件会有相同的部分(比如说存在部分相同的样式,使用了相同的组件,使用了公共样式等等),因此我们需要在打包过程中提取公共的部分并独立开来。
在之前版本的webpack中,我们可以使用CommonsChunkPlugin 进行提取,而在webpack4+版本,CommonsChunkPlugin 已经从 webpack v4 legato 中移除,webpack 4+ 版本使用内置的 SplitChunksPlugin 插件来进行公共部分的提取

use?

因为 SplitChunksPlugin 是 webpack 4+ 版本内置的插件, 所以无需安装, 只需在 webpack.config.js 中配置:

    plugins: [
    	// ...
    ],
    optimization: {
        splitChunks: {
            cacheGroups: {
                commons: {
                    name: 'commons',    //提取出来的文件命名
                    chunks: 'initial',  //initial表示提取入口文件的公共部分
                    minChunks: 2,       //表示提取公共部分最少的文件数
                    minSize: 0          //表示提取公共部分最小的大小
              }
          }
      }
  }

保存,使用插件之后运行build命令打包结果如下:
在这里插入图片描述

可以看到,webpack帮我们把js和css中公共的部分提取出来并放置命名为commons的文件中(如图中的commons.js和commons.css)。本次学习和练习到这里告一段落~~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值