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

2023-11-06

提取: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)。本次学习和练习到这里告一段落~~~~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 『HTML&CSS』选择器(一)

    前面我们说过 CSS一共分为两大块 选择器和声明块 本篇博客主要对选择器进行一些简单的介绍 元素选择器 我们前面使用的都是元素选择器 通过元素选择器可以选择页面中的所有指定元素 语法 元素名 标签名 代码演示
  • 深度学习:Opencv的BlobfromImage如何工作

    深度学习 Opencv的BlobfromImage如何工作 1 原理 1 2 均值减法是什么 1 3 cv2 dnn BlogFromImage 2 源码 参考 想要从深度神经网络获取正确的预测 首先需要预处理数据 在深度学习 图像分类中
  • vue入门者uni-app开发之---入坑

    vue入门者uni app开发之 入坑 前言 起步 项目结构 开始开发 举例登陆全局保持状态 退出登陆 前言 作为一个刚入门vue的前端 我们公司主要运营公众号网页 之前一直用的jq 发现用户体验差的一匹 后来公司决定将前端技术栈定为vue
  • js基础面试题

    一 值类型与引用类型 1 js如何判断数据类型 值类型 javascript存储数据两个区域 栈 堆 栈 通常空间是固定 堆通常空间是动态的分配 js值类型 名称与值都存储在栈中 var a 15 值类型 var b a 把a的值赋值给 b
  • arm芯片厂家排名_国产芯片目前至少有10种,其中有3种,达到了世界顶尖水平

    说起来 中国芯的发展史称得上是一部磨难史 因为技术 设备 人才等都被西方国家封锁 就是为了让中国这个大市场巨额进口芯片 但这些年 中国的企业也没有闲着 可以说把世界上的主流的芯片架构尝试了个遍 就是为了找出一台适合自己发展的路来 目前国内的
  • 9款超级实用的网页设计工具,快来看看有没有你用过的

    随着网络时代的快速发展 游戏 购物 音乐 影视和社交网站的兴起都表明了网页设计的重要性 网页设计工具作为网页设计师的生产工具 自然要选择好的 让我们分享9个高质量的网页设计工具 让您的设计效率悄然提高 即时设计 即时设计是一款免费的在线 U
  • 如何选择LDO (LDO的关键指标及定义)

    1 LDO选型关键指标及定义 1 1 输入电压范围 LDO的输入电压范围决定了最低的可用输入电源电压 指标可能提供宽的输入电压范围 最小的输入电压VIN必须大于VOUT VDO 需要注意 这与器件Datasheet中所给出的输入电压最小值无
  • 风格迁移:一文梳理经典方法发展脉络及原理:Gram矩阵、WCT、WCT2

    风格迁移 一文梳理经典方法发展脉络及原理 1 Image Style Transfer Using Convolutional Neural Networks Gram矩阵 CVPR2016 1 1 概述 1 2 方法 2 Deep Pho
  • 代码重定位

    1 程序段介绍 参见博客 C语言程序段的定义 实际应用分析 2 什么是代码重定位 代码重定位就是将代码搬运到链接地址处 实际在操作时就是将代码复制一份到链接地址处 我们把代码下载到设备的Flash中 然后代码运行却要求另一个地址 于是我们就
  • vue图片预览放大,缩小,旋转等功能,用 v-viewer来实现,还有他的api

    前言 推荐一款特别优秀的插件 viewerjs 他可以实现图片预览功能 点击图片实现弹框操作图片的效果 点我进入GitHub地址 实现效果 这里说先下实现步骤 步骤一 安装 注意这里是 v viewer npm install v view
  • Spark函数式编程基础

    目录 一 函数定义与使用 1 函数式编程简介 2 匿名函数 3 占位符语法 4 高阶函数 5 闭包 二 针对容器的操作 1 遍历操作 2 映射操作 3 过滤操作 4 规约操作 5 拆分操作 一 函数定义与使用 1 函数式编程简介 函数式编程
  • maven怎么引入jdom_Maven添加本地依赖

    用mvn命令把本地jar包添加到maven仓库 mvn install install file Dfile f aliyn openservices jar DgroupId com aliyun DartifactId openserv
  • Python:sklearn数据预处理中fit(),transform()与fit_transform()的区别

    1 概述 注意这是数据预处理中的方法 Fit Method calculates the parameters and and saves them as internal objects 解释 简单来说 就是求得训练集X的均值啊 方差啊
  • STM32与拉力传感器通信

    目录 第一部分 设备通信图 第二部分 设备接线 HX711与传感器的接线 HX711与MCU的接线 第三部分 驱动代码 HX711引脚初始化 Dout CLK HX711读取数据函数 HX711获取传感器的值 头文件定义 实验结果 第一部分
  • linux svn 记住密码,Linux(Ubuntu)下保存SVN账户密码-Fun言

    Linux Ubuntu 下用SVN进行更新等操作时 总是提示输入用户名和密码 很不方便 解决方法1 推荐 不需要修改配置文件 只需要用sudo执行一次svn命令 并记住密码就行了 记住密码需要权限的 sudosvn ci m featur
  • 如何让Chrome浏览器允许http网站打开摄像头和麦克风

    问题来源 本地运行的项目调用摄像头好用 访问线上地址 发现调用摄像头的方法都不存在 问了度娘 发现该问题与浏览器的安全策略有关 出于安全考虑 浏览器是不允许随便开启摄像头的 https协议下方可开启 解决 这一项功能要用到谷歌浏览器的实验性
  • window 安装Hadoop3.0.0

    第一步 Hadoop 官网下载地址 https hadoop apache org releases html 第二步 将下载hadoop 3 0 0 tar gz 解压至指定文件夹 C hadoop 第三步 配置hadoop 涉及环境变量
  • 奇葩问题之奇葩解决方案系列——安卓手机外部加载Assetbundle

    一 前言 首先 这个需求是这么被创造出来的 我们要在安卓手机上加载超过一个G的资源 正常的Unity的程序员都会立马想到使用Assetbundle进行资源打包和加载 我当然也不例外 于是乎我就吭哧吭哧的熟练的对资源进行打包 然后用异步 As
  • vue动态路由的使用

    项目创建过程中经常遇到的一个需求就是权限管理 本文就我在使用动态路由的过程中进行一个总结 首先 前端想要实现对菜单的动态渲染实际上有两种操作方式 1 前端还是书写静态路由表 根据后端传来的code利用v if去判断渲染菜单项 实际这种使用方
  • webpack学习(五):webpack4+压缩和提取CSS以及提取公共部分

    提取 mini css extract plugin what 在过去 如何将 CSS 提取到一个文件中这是 extract text webpack plugin 的工作 不幸的是这个插件与 webpack 4 不太兼容 根据 Micha