【译】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
};
复制代码

这就是今天的内容啦~

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

下周再见哦。


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

查看所有标签

猜你喜欢:

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

人工智能

人工智能

S. Russell、P. Norvig / 清华大学出版社 / 2006-5-1 / 128.00元

本书被全世界89个国家的900多所大学用作教材。 本书以详尽和丰富的资料,从理性智能体的角度,全面阐述了人工智能领域的核心内容,并深入介绍了各个主要的研究方向。全书分为8大部分:第一部分“人工智能”,第二部分“问题求解”,第三部分“知识与推理”,第四部分“规划”,第五部分“不确定知识与推理”,第六部分“学习”,第七部分“通信、感知与行动”,第八部分“结论”。本书既详细介绍了人工智能的基本概念......一起来看看 《人工智能》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具