purgecss 无法识别条件类

zer*_*ero 4 wordpress-theming tailwind-css css-purge

所以我将 TailwindCSS 用于我正在开发的 WP 主题。

我在创建生产级主题文件时遇到了一个问题,因为根据我对问题的理解,purgecss 无法识别模板部件上使用的条件类。例如,假设我创建了一个名为“business-card.php”的模板部分,我在其中传递了一个变量type(使用set_query_var/ get_query_var):

页面-about.php

set_query_var('type', 'A');
get_template_part('template-parts/content/business', 'card');

set_query_var('type', 'B');
get_template_part('template-parts/content/business', 'card');
Run Code Online (Sandbox Code Playgroud)

企业卡.php

$type = get_query_var('type')
<div class="<?php echo type == 'A' ? 'text-color-A' : 'text-color-B' ?>">
--- insert some content here ---
</div>
Run Code Online (Sandbox Code Playgroud)

所以会有两个 div,一个有一个text-color-A类,另一个有一个text-color-B,两者都是使用配置文件创建的(而不是包含在基本的顺风主题中)。这在开发中很好——因为 tailwind 实际上从配置文件创建了实用程序颜色类。但是出于某种原因,当它在生产中(即清除和缩小)时,它没有那些实用程序类——它们只在模板部分作为条件类使用(而不是在任何其他文件中)。

Gin*_*ino 9

如果您正在使用,您可以配置白名单类,这些类将直接在文件内部Tailwind 2.0+被忽略。purge CSStailwind.config.js

text-ingido-400下面是我自己的代码示例,其中我将类列入白名单

  // tailwind.config.js
  module.exports = {
    purge: {
      content: ['./src/**/*.{js,jsx,ts,tsx}', './public/index.html'],

      options: {
        safelist: ['text-indigo-400']
      }
    } ,
     darkMode: false, // or 'media' or 'class'
     theme: {
       extend: {},
     },
     variants: {
       extend: {},
     },
     plugins: [],
   }
Run Code Online (Sandbox Code Playgroud)

有关更多信息,您可以查看相关文档: https://tailwindcss.com/docs/optimizing-for-Production


Ibr*_*med 7

PurgeCSS 在您的 HTML 中查找类的方式非常天真。它不会尝试解析您的 HTML 并查找类属性或动态执行您的 JavaScript — 它只是在整个文件中查找与此正则表达式匹配的任何字符串:

/[^<>"'`\s]*[^<>"'`\s:]/g
Run Code Online (Sandbox Code Playgroud)

这意味着避免在模板中使用字符串连接动态创建类字符串很重要,否则 PurgeCSS 将不知道保留这些类。

所以不要使用字符串连接来创建类名:

/[^<>"'`\s]*[^<>"'`\s:]/g
Run Code Online (Sandbox Code Playgroud)

相反,动态选择一个完整的类名:

<div :class="text-{{ error ? 'red' : 'green' }}-600"></div>
Run Code Online (Sandbox Code Playgroud)

只要一个类名完整地出现在你的模板中,PurgeCSS 就不会删除它。

有关更多详细信息,请参阅文档:

  • 您应该提及 Tailwind 链接源,您在其中复制了 [TailwindCSS / 编写可清除 HTML](https://tailwindcss.com/docs/optimizing-for-product#writing-purgeable-html) 中的文本。 (2认同)
  • @ChristosLytras 我曾经在那里...不知道为什么我删除了它。已加回来,谢谢! (2认同)

Enr*_*vez 6

您可以使用 PurgeCSS 白名单选项来添加这些类。

const purgecss = new Purgecss({
    //... Your config
    whitelist: ['text-color-A', 'text-color-B', 'etc']
})
Run Code Online (Sandbox Code Playgroud)

或白名单模式(正则表达式匹配)

whitelistPatterns: [/^text-color/], // All classes starting with text-color
Run Code Online (Sandbox Code Playgroud)

您可以在这里找到更多信息