在Webpack 5 中如何进行 CSS 常用配置?

2023-11-18

本文摘要:主要通过实操讲解运用Webpack 5 CSS常用配置的方法步骤

前文已谈到可以通过配置 css-loaderstyle-loader,使 webpack5 具有处理 CSS 资源的能力。css-loader 首先会分析出各个 CSS文件之间的关系,把各个CSS文件合并为一大段 CSS,然后将 CSS 文件编译为 CommonJS 模块,并把该模块引入到 JS 中。紧接着 style-loader 会从 JS 中提取出刚才引入的编译后的 CSS,在页面的 header 中创建 style 标签,并插入该css。

1 提取 CSS 文件

上述配置打包后的资源,在浏览器中运行时,首先会加载 JS 文件,之后才会创建 style 标签来插入样式,很多情况下会出现闪屏现场,导致用户体验不好。这时候可通过配置 mini-css-extract-plugin 插件来提升用户体验,该插件可以提取出独立的 CSS 文件,通过 link 标签加载样式。

插件官网:https://webpack.js.org/plugins/mini-css-extract-plugin/

1.1 安装依赖

安装 mini-css-extract-plugin 为开发依赖:

yarn add mini-css-extract-plugin -D

1.2 修改 webpack 配置

修改 webpack.config.js 文件:

1)引入插件:

const MiniCssExtractPlugin = require('mini-css-extract-plugin')

2)修改 loader 配置:将 module.rules 中所有 style-loader 替换为该插件提供的loader:MiniCssExtractPlugin.loader,如:

//...
module: {
  rules: [
    {
      test: /\.css$/,
      use: [
        MiniCssExtractPlugin.loader,
        'css-loader'
      ]
    },
    {
      test: /\.s[ca]ss$/,
      use: [
        MiniCssExtractPlugin.loader,
        'css-loader',
        'sass-loader',
      ]
    },
    {
      test: /\.less$/,
      use: [
        MiniCssExtractPlugin.loader,
        'css-loader',
        'less-loader',
      ]
    },
    {
      test: /\.styl$/,
      use: [
        MiniCssExtractPlugin.loader,
        'css-loader',
        'stylus-loader'
      ]
    },
//...
  ]
},
//...

3)添加插件配置:在 plugins 中添加该插件

  plugins: [
// ...
    new MiniCssExtractPlugin({
      filename: 'css/index.css'
    })
  ],

1.3 测试运行

执行 yarn build 打包,打包成功后:

1)查看输出目录 dist,该目录中新增了 css/index.css

2)在浏览器中运行 dist/index.html,在 Elements中可看到 link 标签引入 css/index.css 文件:

image-20220717214549251

2 CSS 兼容性处理

由于浏览器碎片化严重,需要进行 CSS 兼容性的处理。如果手动编写各种兼容样式,工作量较大,可使用 postcss-loader 来实现 CSS 的兼容性。官网:https://webpack.js.org/loaders/postcss-loader/#autoprefixer

2.1 安装依赖

postcss-loader 依赖于 postcss。post-css 有大量的配置,我们可以使用它的预设 postcss-preset-env,该预设包括了 autoprefixer等。

yarn add postcss-loader postcss postcss-preset-env -D

2.2 修改 webpack 配置

1)在 webpack.config.js 中定义通用的 postcss-loader 配置:

const commonPostcssLoader = {
  loader: 'postcss-loader',
  options: {
    postcssOptions: {
      plugins: [
        'postcss-preset-env'
      ]
    }
  }
}

2)在每个css相关的loader配置中添加上面定义的loader。注意,上面定义的 commonPostcssLoader 需要在 css-loader 之前执行,在 css 预处理器的loader(sass-loader / less-loader / stylus-loader)之后执行:

  rules: [
      {
        test: /\.css$/,
        use: [
          MiniCssExtractPlugin.loader,
          'css-loader',
          commonPostcssLoader
        ]
      },
      {
        test: /\.s[ca]ss$/,
        use: [
          MiniCssExtractPlugin.loader,
          'css-loader',
          commonPostcssLoader,
          'sass-loader',
        ]
      },
      {
        test: /\.less$/,
        use: [
          MiniCssExtractPlugin.loader,
          'css-loader',
          commonPostcssLoader,
          'less-loader',
        ]
      },
      {
        test: /\.styl$/,
        use: [
          MiniCssExtractPlugin.loader,
          'css-loader',
          commonPostcssLoader,
          'stylus-loader'
        ]
      },
// ...
    ]

2.3 添加 .browserslistrc 文件

在项目根目录下创建 .browserslistrc 文件,该文件告诉 postcss-loader 需要支持的浏览器。可以在控制台中执行命令 npx browserslist 查看浏览器版本:

image-20220717230813678

在实践中,.browserslistrc 我通常写如下内容:

> 1%
last 10 version
not dead

上述配置表示:占有率大于1%、并且最新的10个版本、并且存在的浏览器。

为了测试 CSS 兼容性,此处暂时将该文件内容修改为占有率大于0.001:

> 0.001%

2.4 测试运行

1)在 src/style/css/css-demo.css 文件中添加一个需要兼容性处理的 css 代码:

h1 {
  border-radius: 10px;
}

2)执行打包命令 yarn build (对应为 webpack 命令)

3)打包成功,查看生成的 dist/css/index.css 文件,可发现做了兼容性处理:

image-20220717231659103

3 CSS 压缩处理

上面打包后提取出来的 index.css 并没有进行压缩,通常在生产环境尽量要压缩文件。webpack 提供了插件 css-minimizer-webpack-plugin 压缩 CSS 文件。

官网:https://webpack.js.org/plugins/css-minimizer-webpack-plugin

3.1 安装依赖

yarn add css-minimizer-webpack-plugin -D

3.2 修改 webpack 配置

1)引入插件

const CssMinimizerWebpackPlugin = require('css-minimizer-webpack-plugin')

2)在 plugins 中添加插件

  plugins: [
// ....
    new CssMinimizerWebpackPlugin()
  ],

3.3 测试运行

执行打包命令 yarn build,查看打包生成的 dist/css/index.css 文件,可看到该文件已经被压缩。

今日优雅哥(youyacoder)学习结束,期待关注留言分享~~

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

在Webpack 5 中如何进行 CSS 常用配置? 的相关文章

随机推荐

  • 如何在spring框架中解决多数据源的问题

    在我们的项目中遇到这样一个问题 我们的项目需要连接多个数据库 而且不同的客户在每次访问中根据需要会去访问不同的数据库 我们以往在 spring 和 hibernate 框架中总是配置一个数据源 因而 sessionFactory 的 dat
  • 电赛-往届题目

    电赛 往届题目 1 2020年电赛题目 度盘 ob11 2 2019年电赛题目 国赛 度盘 du24 3 2018年电赛题目 度盘 eogn
  • angular5项目下利用router navigate实现页面跳转

    1 需要引入 import Router from angular router 2 ts中添加触发方法 navigate this router navigate targetRouter queryParams id this sele
  • webpack中引用图片出现Module parse failed: Unexpected character '�' (1:0) You may need an appropriate loader

    1 查看url loader和file loader有没有安装好 如果没有 重新安装 file loader安装指令 npm install save dev file loader url loader安装指令 npm install u
  • UE4 VR WidgetInteraction 局域网设定

    无论用什么 我们要先确定是什么 鲁迅 下面是关于WidgetInteraction的官方定义 控件交互组件执行光线投射 确定它是否命中世界场景中的控件组件 如命中 可设置规则确定与其交互的方式 交互通过模拟定义的按键来执行 例如一个按钮可通
  • Python语言基础—一文看懂Python异常

    系列文章目录 Python语言基础 注释的作用及分类 Python语言基础 常用运算符总结 Python语言基础 定义变量与数据类型 Python语言基础 if判断和循环总结 Python语言基础 理解面向对象 Python语言基础 集合的
  • Java学习--JDBC操作数据库(直析操作)

    1 了解JDBC的常用类和接口 DriverManager类 用来管理数据库中的所有驱动程序 Connection接口 代表与特定的数据库的连接 Statement接口 用于创建向数据库中传递SQL语句的对象 PreparedStateme
  • -day25--mysql入门

    第四模块 MySQL数据库 数据库管理系统 DBMS 专注于帮助开发者解决数据存储的问题 这样开发者就可以把主要精力放在实现业务功能上了 业内有很多的的数据库管理系统产品 例如 MySQL 原来是sun公司 后来被甲骨文收购 现在互联网企业
  • 排序算法(java版本)

    1 直接插入排序 1 基本思想 在要排序的一组数中 假设前面 n 1 n gt 2 个数已经是排 好顺序的 现在要把第n个数插到前面的有序数中 使得这n个数 也是排好顺序的 如此反复循环 直到全部排好顺序 2 实例 3 用java实现 pa
  • 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK2038 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MDd_DynamicDe

    系列文章目录 文章目录 系列文章目录 前言 一 错误原因 二 解决问题 在这里插入图片描述 https img blog csdnimg cn a8ce751feae54668aa54ffe2e0031560 png 前言 严重性 代码 说
  • 2023年网络安全考试试题,背下来通过率99%

    1 关于数据使用说法错误的是 A 在知识分享 案例中如涉及客户网络数据 应取敏感化 不得直接使用 B 在公开场合 公共媒体等谈论 传播或发布客户网络中的数据 需获得客户书面授权或取敏感化 公开渠道获得的除外 C 客户网络数据应在授权范围内使
  • clang+llvm+linux x86平台交叉编译arm64

    下载工具链 bin bash workPATH pwd toolchain mkdir p workPATH cd workPATH URL LLVM https github com llvm llvm project releases
  • 算法训练营第十一天(7.22)

    目录 LeeCode20 Valid Parentheses LeeCode1047 Remove All Adjacent Duplicates In String LeeCode150 Evaluate Reverse Polish N
  • 第三章 3.1节练习 & 3.2.2节练习

    练习3 1 使用恰当的using声明重做1 4 1节 11页 和2 6 2节 67页 的练习 解答 这里就不写代码了 因为可以using命名空间或者空间中的对应函数 可以出现很多种组合 可以按照自己喜欢或熟悉的方式来写 练习3 2 编写一段
  • python 面向对象 超级详细全面讲解

    如有错误 欢迎留言指出讨论 1 面向对象和面向过程 1 1 面向过程注重的是结果 从结果出发去考虑问题的实现步骤 1 2 面向对象注重的是设计 从现实生活的角度 从设计的角度去考虑问题的实现步骤 1 3 虽然2种思想的目的都是为了做出一个程
  • 00后视频审核员,3个月顺利转行车载测试,他说你也能行!

    21年夏天毕业后 自觉比较社恐的我去找了一份看似清闲又不用和逼人打交道太多的工作 原本以为这份工作会成为我的庇佑所 没想到也是一地鸡毛 是的 我是一个视频审核 顾名思义 作为一个视频审核员 毫无疑问我的工作就是看视频 也许有人会说 就看看视
  • numpy中np.array()功能

    功能 将数据转化为矩阵 a 1 2 3 4 5 6 7 8 9 b np array a c np asarray a a 2 1 print a print b print c 从中我们可以看出np array与np asarray功能是
  • JAVA并发队列

    Java并发队列 在并发队列上JDK提供了两套实现 一个是以ConcurrentLinkedQueue为代表的高性能队列 一个是以BlockingQueue接口为代表的阻塞队列 无论哪种都继承自Queue 一 ConcurrentLinke
  • 【Hbase 05】Hbase表的设计原则与优化方案

    这里说一下Hbase在使用过程中的表设计原则与优化方案 如果你是运维或者开发兼顾环境的工作 也许比较受用 话不多说 我们直接开始说优化的内容 一 表设计原则 1 行键设计 行键在设计的时候要尽量的散列 例如可以考虑使用哈希 加密算法等使结果
  • 在Webpack 5 中如何进行 CSS 常用配置?

    本文摘要 主要通过实操讲解运用Webpack 5 CSS常用配置的方法步骤 前文已谈到可以通过配置 css loader 和 style loader 使 webpack5 具有处理 CSS 资源的能力 css loader 首先会分析出各