【译】Vue 的小奇技(第三篇):用 PurgeCSS 移除不需要的 CSS

栏目: CSS · 发布时间: 5年前

内容简介:特别声明:本文是作者Alex Jover 发布在VueDose 上的一个系列。版权归作者所有。译者在翻译前已经和作者沟通得到了翻译整个系列的授权。

特别声明:本文是作者Alex Jover 发布在VueDose 上的一个系列。

版权归作者所有。

译者在翻译前已经和作者沟通得到了翻译整个系列的授权。

为了不影响大家阅读,获得授权的记录会放在本文的最后。

我们有很多可以提高 web 性能的方法,而其中一种就是把所不需要的 JS 和 CSS,从我们的应用中全部移除掉。

当我们需要面对大型应用或者老旧项目,且其中使用了类似 Bootstrap、Bulma 或 Tailwind 这种框架时,移除不需要的 CSS 代码就变得尤为重要。

PurgeCSS 是一个能够通过字符串对比,来决定移除不需要的 CSS 的工具。这能带来一些好处,但也存在要注意的点,所以特别留意一下我接下来要提到的白名单部分。

举个例子,VueDose’s website 是建立在应用框架 Nuxt 和 UI 框架 Tailwind 之上的,并且通过 PurgeCSS 这个 工具 来优化了 CSS 代码。

在不启用 PurgeCSS 时,你可以看到 tailwind.css 这文件足足有 485 KB:

【译】Vue 的小奇技(第三篇):用 PurgeCSS 移除不需要的 CSS

在启用 PurgeCSS 后,tailwind.css 直接被压缩到了 16 KB:

【译】Vue 的小奇技(第三篇):用 PurgeCSS 移除不需要的 CSS

对于 PurgeCSS 的配置因项目不同而异,它不仅可以作为 webpack 的插件,还可以作为 postcss 的插件。

以 VueDose 官网为例,我将 PurgeCSS 用作为 postcss 的插件,并为该项目创建了如下的 postcss.config.js 配置文件:

const purgecss = require("@fullhuman/postcss-purgecss");

const plugins = [
    // ...
];

if (process.env.NODE_ENV === "production") {
  plugins.push(
    purgecss({
      content: [
        "./layouts/**/*.vue",
        "./components/**/*.vue",
        "./pages/**/*.vue"
      ],
      whitelist: ["html", "body"],
      whitelistPatternsChildren: [/^token/, /^pre/, /^code/],
    })
  );
}

module.exports = { plugins };
复制代码

首先,你所要做的就是使用 content 字段,来告诉 PurgeCSS 去哪里查找将要对应匹配的 class。

其次,对于一些你不想要移除的 class 或者某些标签上对应的样式名称,你可以它们加到白名单字段中。你至少需要添加 htmlbody 标签以及任意的动态 class 样式名称到白名单配置字段中。

在我的 VueDose 官网项目中,我使用了prismjs 来高亮代码段,这个库会添加一些名为 token 的 class,以及一些样式代码到 precode 元素上。为了能够排除掉这些不需要应用 PurgeCSS 的地方,我用上了 whitelistPatternsChildren 这个属性。

另外的,Tailwind 需要一个自定义extractor 来与 PurgeCSS 配合使用。VueDose 官网项目中所使用的 postcss.config.js 配置文件,其所有内容如下所示:

const join = require("path").join;
const tailwindJS = join(__dirname, "tailwind.js");
const purgecss = require("@fullhuman/postcss-purgecss");

class TailwindExtractor {
  static extract(content) {
    return content.match(/[A-Za-z0-9-_:\/]+/g) || [];
  }
}

const plugins = [require("tailwindcss")(tailwindJS), require("autoprefixer")];

if (process.env.NODE_ENV === "production") {
  plugins.push(
    purgecss({
      content: [
        "./layouts/**/*.vue",
        "./components/**/*.vue",
        "./pages/**/*.vue"
      ],
      whitelist: ["html", "body"],
      whitelistPatternsChildren: [/^token/, /^pre/, /^code/],
      extractors: [
        {
          extractor: TailwindExtractor,
          extensions: ["html", "vue"]
        }
      ]
    })
  );
}

module.exports = {
  plugins
};
复制代码

这就是今天的内容啦~

你可以在线阅读这篇原文,里面有可供复制粘贴的源代码。如果你喜欢这个系列的话,请分享给你的同事们!

下周再见哦。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

500 Lines or Less

500 Lines or Less

Amy Brown、Michael DiBernardo / 2016-6-28 / USD 35.00

This book provides you with the chance to study how 26 experienced programmers think when they are building something new. The programs you will read about in this book were all written from scratch t......一起来看看 《500 Lines or Less》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具