webpack4 CSS Tree Shaking的使用

下面是webpack4的CSS tree shaking的使用攻略。

什么是CSS tree shaking

CSS tree shaking是一项优化技术,通过去除没有使用到的CSS代码,可以显著减小CSS的文件大小。在webpack4中,CSS tree shaking是通过PurgeCSS实现的,PurgeCSS是一个可以检查CSS中未使用样式的工具。

如何使用CSS tree shaking

1. 配置webpack.config.js

首先需要在webpack.config.js文件中添加PurgeCSS插件,下面是一个示例:

const path = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
const PurgecssWebpackPlugin = require('purgecss-webpack-plugin');
const glob = require('glob');

module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'bundle.[hash:8].js',
    path: path.join(__dirname, 'dist')
  },
  mode: 'production',
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          MiniCssExtractPlugin.loader,
          {
            loader: 'css-loader',
            options: {
              importLoaders: 1,
              modules: {
                localIdentName: '[local]_[hash:base64:5]'
              }
            }
          },
          'postcss-loader'
        ]
      }
    ]
  },
  optimization: {
    minimizer: [new OptimizeCSSAssetsPlugin()]
  },
  plugins: [
    new MiniCssExtractPlugin({
      filename: 'bundle.[hash:8].css'
    }),
    new PurgecssWebpackPlugin({
      paths: glob.sync(`${path.join(__dirname, 'src')}/**/*`, { nodir: true })
    })
  ]
};

2. 添加要检查的文件路径

在webpack.config.js中,需要在PurgeCSS插件中添加要检查的文件路径,需要忽略的文件路径等信息。在示例代码中,我们使用了glob库来动态获取要检查的文件路径,代码如下:

new PurgecssWebpackPlugin({
  paths: glob.sync(`${path.join(__dirname, 'src')}/**/*`, { nodir: true }),
  whitelist: ['html', 'body'],
  whitelistPatterns: [/^nav-/]
})

上面的例子表示要检查src目录下的所有文件,但是要排除目录。同时,我们也可以通过whitelist和whitelistPatterns选项来排除一些CSS代码。

3. 添加ignoreCSS选项

如果你使用了Less或者Sass等CSS预处理器,需要在webpack.config.js的PurgeCSS插件中添加ignoreCSS选项,这是因为PurgeCSS无法直接解析这些预处理器所编写的代码。示例代码如下:

new PurgecssWebpackPlugin({
  paths: glob.sync(`${path.join(__dirname, 'src')}/**/*`, { nodir: true }),
  whitelist: ['html', 'body'],
  whitelistPatterns: [/^nav-/],
  ignoreCSS: ['^theme']
})

注意,ignoreCSS选项中的正则表达式必须匹配预处理器中的类名前缀。

CSS tree shaking示例说明

下面我将给出两个CSS tree shaking的示例:

示例1

在过去的网站制作中,开发者会频繁使用reset.css进行重置默认样式。 但是在项目开发以后会发现css文件变大了,一些reset.css中的样式并没有用到。

例如reset.cs里面的h1-h6标签样式,我们通常在项目中基本上都自己定义了。这样reset.css中的不必要的样式就可以使用CSS tree shaking去除。代码如下:

/* reset.css */
h1{ font-size: 32px; }
h2{ font-size: 24px; }
h3{ font-size: 18px; }
h4{ font-size: 16px; }
h5{ font-size: 14px; }
h6{ font-size: 12px; }

使用CSS tree shaking后,只会保留有用的h1样式,而其他h2-h6样式就会被移除:

/* after css tree shaking */
h1{ font-size: 32px; }

示例2

在后端渲染的前端项目中,我们通常会使用一些第三方库,如Bootstrap。但是,这些库通常过大且包含一些我们使用不到的样式。通过CSS Tree Shaking,我们可以去除这些无用的CSS样式。

下面是一个以Bootstrap为例的代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Hello, world!</title>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="./bootstrap.css">
  <link rel="stylesheet" href="./style.css">
</head>
<body>
  <div class="container">
    <h1>Hello, world!</h1>
  </div>
  <script src="./index.js"></script>
</body>
</html>

在样式中我们只使用了.container一个类名,在webpack4环境下使用CSS Tree Shaking处理后,我们的生成的CSS文件中将只包含使用到的样式类名。

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Hello, world!</title>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="./bootstrap.css">
  <link rel="stylesheet" href="./style.704c0d72.css">
</head>
<body>
  <div class="container">
    <h1>Hello, world!</h1>
  </div>
  <script src="./index.js"></script>
</body>
</html>

可以看到,处理后的CSS文件只包含了我们使用到的.container类名,而其他无用的样式都被去除了。

以上就是webpack4的CSS tree shaking的使用攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:webpack4 CSS Tree Shaking的使用 - Python技术站

(0)
上一篇 2023年6月9日
下一篇 2023年6月9日

相关文章

  • 详解CSS多种三列自适应布局实现

    首先我们需要明确三列自适应布局的概念,即页面中有三列,左右两列宽度固定,中间一列宽度自适应。我们可以使用CSS实现这种布局,下面是使用多种方法实现三列自适应布局的详细攻略: 1. 方法一:使用 float 属性实现三列自适应布局 在HTML中,我们需要使用一个 div 容器来包含左、右、中三列,同时要设置盒子模型(box-sizing)属性为border-b…

    css 2023年6月10日
    00
  • css的几种以图换字方式小结

    这里简单介绍一下“CSS的几种以图换字方式”: CSS的几种以图换字方式是利用CSS的背景图和文字颜色属性来实现在Web页面中实现类似图标字的效果,可以用于一些特殊场景下的设计需求。 以下是几种常见的方式: 1. 利用文字颜色实现 .sign-play { font-size: 16px; font-weight: bold; color: #f33; te…

    css 2023年6月9日
    00
  • JavaScript获取图片像素颜色并转换为box-shadow显示

    为了实现JavaScript获取图片像素颜色并转换为box-shadow显示,我们需要进行以下步骤: 步骤1:获取图片数据 首先,我们需要在HTML中添加一个图片元素,然后使用JavaScript获取到该图片数据。可以通过HTMLCanvasElement来获取图片数据,如下所示: const img = document.getElementById(‘i…

    css 2023年6月9日
    00
  • css中postion的fixed与absolute区别详解

    来讲解一下 CSS 中 position 的 fixed 与 absolute 的区别。在讲解之前,先介绍一下 position 属性: position 属性用于指定一个元素在文档中的定位方式,取值包括 static、relative、absolute、fixed、sticky 等。 其中,fixed 和 absolute 的定位方式相对较为特殊。接下来我…

    css 2023年6月10日
    00
  • js+css在交互上的应用

    我会尽力详细讲解“js+css在交互上的应用”的完整攻略。在本次讲解中,我将着重介绍如何使用js和css实现网站的交互特效。下面是详细的步骤和示例操作。 1. 使用CSS实现动态效果 CSS可以帮助我们实现很多简单的动态效果,例如:鼠标移动到元素上时改变元素的颜色或大小,展示隐藏的元素等。 1.1 鼠标移动到元素上改变元素的颜色 要实现这一效果,我们可以使用…

    css 2023年6月10日
    00
  • vue中引入第三方字体文件的方法示例

    下面是关于Vue中引入第三方字体文件的方法的攻略详解。 1.引入Google Font字体 Google Font是一个在Web中可以免费使用的字体库,可以方便地让我们引入自己想要的各种字体。下面详细介绍如何在Vue中引入Google Font字体。 首先,我们需要在html文件中引入Google Font的链接地址,具体代码如下: <link hre…

    css 2023年6月10日
    00
  • 浅谈CSS过渡、动画和变换

    浅谈 CSS 过渡、动画和变换 什么是 CSS 过渡 CSS 过渡是指在某些 CSS 属性值发生改变时,逐渐地、平滑地过渡到新的属性值。CSS 过渡可以应用在大部分 CSS 属性上,例如:背景颜色、边框宽度、盒子大小等等。 CSS 过渡的实现需要以下两个要素: 需要明确属性值的起始点和结束点。 指定过渡的时间和方式。 下面是一个 CSS 过渡的示例: .bu…

    css 2023年6月10日
    00
  • 总结30个CSS3选择器

    下面是讲解 “总结30个CSS3选择器” 的完整攻略。 什么是CSS3选择器 CSS3选择器是一种用来对网页元素进行选择的工具,可以通过它们来定位和修改某个或某些元素的样式。CSS3选择器为我们提供了一种强大的方式来选择HTML元素。 CSS3选择器的种类 元素选择器 元素选择器通过 HTML 元素名称来选取元素。 示例代码: p { color: red;…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部