PurgeCSS中文文档网PurgeCSS中文文档网
首页
文档
API参考
GitHub
首页
文档
API参考
GitHub
  • PurgeCSS

    • 关于PurgeCSS
    • 快速开始
    • 配置
    • 命令行接口
    • 编程API
    • 安全列表
    • 提取器
  • 插件

    • PostCSS插件
    • Webpack插件
    • Gulp插件
    • Grunt插件
    • Gatsby插件
  • 指南

    • Vue
    • React
    • Next.js
    • Nuxt.js
    • Razzle
    • WordPress
    • Hugo
  • 比较
  • 常见问题

    • 如何与CSS模块一起使用
    • 如何与Ant Design一起使用

配置

PurgeCSS 提供了一系列选项,允许你自定义其行为。自定义可以提高 PurgeCSS 的性能和效率。你可以创建一个包含以下选项的配置文件。

配置文件

配置文件是一个简单的 JavaScript 文件。默认情况下,JavaScript API 将查找 purgecss.config.js。

module.exports = {
  content: ['index.html'],
  css: ['style.css']
}

然后你可以使用配置文件:

const purgecss = await new PurgeCSS().purge()
// 或使用文件路径作为唯一参数
const purgecss = await new PurgeCSS().purge('./purgecss.config.js')

选项

选项由以下类型定义:

interface UserDefinedOptions {
  content: Array<string | RawContent>;
  css: Array<string | RawCSS>;
  defaultExtractor?: ExtractorFunction;
  extractors?: Array<Extractors>;
  fontFace?: boolean;
  keyframes?: boolean;
  output?: string;
  rejected?: boolean;
  rejectedCss?: boolean;
  stdin?: boolean;
  stdout?: boolean;
  variables?: boolean;
  safelist?: UserDefinedSafelist;
  blocklist?: StringRegExpArray;
}

interface RawContent {
  extension: string
  raw: string
}

interface RawCSS {
  raw: string
}

type StringRegExpArray = Array<RegExp | string>;

type ComplexSafelist = {
  standard?: StringRegExpArray;
  deep?: RegExp[];
  greedy?: RegExp[];
  variables?: StringRegExpArray;
  keyframes?: StringRegExpArray;
};

type UserDefinedSafelist = StringRegExpArray | ComplexSafelist;
  • content

你可以使用文件名或通配符数组指定 PurgeCSS 应分析的内容。文件可以是 HTML、Pug、Blade 等。

await new PurgeCSS().purge({
  content: ['index.html', '**/*.js', '**/*.html', '**/*.vue'],
  css: ['css/app.css']
})

PurgeCSS 还支持原始内容。要这样做,你需要传递一个带有 raw 属性的对象,而不是文件名。要正确使用自定义提取器,你需要同时传递 extension 属性。

await new PurgeCSS().purge({
  content: [
    {
      raw: '<html><body><div class="app"></div></body></html>',
      extension: 'html'
    },
    '**/*.js',
    '**/*.html',
    '**/*.vue'
  ],
  css: [
    {
      raw: 'body { margin: 0 }'
    },
    'css/app.css'
  ]
})
  • css

与 content 类似,你可以使用文件名或通配符数组指定 PurgeCSS 应处理的 CSS。

await new PurgeCSS().purge({
  content: ['index.html', '**/*.js', '**/*.html', '**/*.vue'],
  css: ['css/app.css']
})

PurgeCSS 还支持原始 CSS。要这样做,你需要传递一个带有 raw 属性的对象,而不是文件名。

await new PurgeCSS().purge({
  content: [
    {
      raw: '<html><body><div class="app"></div></body></html>',
      extension: 'html'
    },
    '**/*.js',
    '**/*.html',
    '**/*.vue'
  ],
  css: [
    {
      raw: 'body { margin: 0 }'
    }
  ]
})
  • defaultExtractor

PurgeCSS 可以根据你的需求进行调整。如果你注意到很多未使用的 CSS 没有被删除,你可能需要使用自定义提取器。提取器可以基于文件扩展名使用。如果你希望对所有类型的文件使用相同的提取器,请在 defaultExtractor 中指定。

await new PurgeCSS().purge({
  // ...
  defaultExtractor: content => content.match(/[\w-/:]+(?<!:)/g) || []
})
  • extractors

PurgeCSS 可以根据你的需求进行调整。如果你注意到很多未使用的 CSS 没有被删除,你可能需要使用自定义提取器。你可以找到可用提取器的列表,它们可以提供更好的准确性和优化,但它们的行为将是特定的。这可能会使事情难以理解。

考虑将提取器视为可能不是必要的高级优化技术。

import purgeFromHTML from 'purge-from-html'

await new PurgeCSS().purge({
  content: ['index.html', '**/*.js', '**/*.html', '**/*.vue'],
  css: ['css/app.css'],
  extractors: [
    {
      extractor: purgeFromHTML,
      extensions: ['html']
    },
    {
      extractor: content => content.match(/[\w-/:]+(?<!:)/g) || [],
      extensions: ['vue', 'js']
    }
  ]
})

你可以在这里了解更多关于提取器的信息。

  • fontFace (默认值:false)

如果 CSS 中有任何未使用的 @font-face 规则,可以通过将 fontFace 选项设置为 true 来删除它们。

await new PurgeCSS().purge({
  content: ['index.html', '**/*.js', '**/*.html', '**/*.vue'],
  css: ['css/app.css'],
  fontFace: true
})
  • keyframes (默认值:false)

如果你使用 CSS 动画库(如 animate.css),可以通过将 keyframes 选项设置为 true 来删除未使用的关键帧。

await new PurgeCSS().purge({
  content: ['index.html', '**/*.js', '**/*.html', '**/*.vue'],
  css: ['css/app.css'],
  keyframes: true
})
  • variables (默认值:false)

如果你使用自定义属性(CSS 变量),或使用它们的库(如 Bootstrap),可以通过将 variables 选项设置为 true 来删除未使用的 CSS 变量。

await new PurgeCSS().purge({
  content: ['index.html', '**/*.js', '**/*.html', '**/*.vue'],
  css: ['css/app.css'],
  variables: true
})
  • rejected (默认值:false)

有时扫描已删除列表以查看是否有明显错误的地方会更实用。如果你想这样做,请使用 rejected 选项。

await new PurgeCSS().purge({
  content: ['index.html', '**/*.js', '**/*.html', '**/*.vue'],
  css: ['css/app.css'],
  rejected: true
})
  • rejectedCss (默认值:false)

如果你想保留被丢弃的 CSS,可以使用 rejectedCss 选项。

await new PurgeCSS().purge({
  content: ['index.html', '**/*.js', '**/*.html', '**/*.vue'],
  css: ['css/app.css'],
  rejectedCss: true
})
  • safelist

你可以指示哪些选择器可以保留在最终的 CSS 中。这可以通过选项 safelist 来完成。

有两种形式可用:

safelist: ['random', 'yep', 'button', /^nav-/]

在形式中,safelist 是一个数组,可以接受字符串或正则表达式。

复杂形式是:

safelist: {
    standard: ['random', 'yep', 'button', /^nav-/],
    deep: [],
    greedy: [],
    keyframes: [],
    variables: []
}

例如:

const purgecss = await new PurgeCSS().purge({
  content: [],
  css: [],
  safelist: ['random', 'yep', 'button']
})

在这个例子中,选择器 .random、#yep、button 将保留在最终的 CSS 中。

const purgecss = await new PurgeCSS().purge({
  content: [],
  css: [],
  safelist: [/red$/]
})

在这个例子中,选择器以 red 结尾的,如 .bg-red 将保留在最终的 CSS 中。

  • safelist.deep

你可以 safelist 选择器及其子选择器基于正则表达式与 safelist.deep。

const purgecss = await new PurgeCSS().purge({
  content: [],
  css: [],
  safelist: {
    deep: [/red$/]
  }
})

在这个例子中,选择器如 .bg-red .child-of-bg 将保留在最终的 CSS 中,即使 child-of-bg 未找到。

  • safelist.greedy

最后,你可以 safelist 整个选择器,如果任何部分选择器匹配正则表达式与 safelist.greedy。

const purgecss = await new PurgeCSS().purge({
  content: [],
  css: [],
  safelist: {
    greedy: [/red$/]
  }
})

在这个例子中,选择器如 button.bg-red.nonexistent-class 将保留在最终的 CSS 中,即使 button 和 nonexistent-class 未找到。

  • blocklist

Blocklist 将阻止 CSS 选择器出现在最终输出 CSS 中。选择器将由 PurgeCSS 删除,即使它们被视为已使用。

blocklist: ['usedClass', /^nav-/]

即使 nav-links 和 usedClass 由提取器找到,它们也将被删除。

  • skippedContentGlobs

如果你提供 globs 用于 content 参数,你可以使用此选项来排除应扫描的某些文件或文件夹。传递一个匹配项应排除的 globs 数组。(注意:如果 content 不是 globs,此选项无效。)

skippedContentGlobs: ['node_modules/**', 'components/**']

这里,PurgeCSS 不会扫描 "node_modules" 和 "components" 文件夹中的任何内容。

  • dynamicAttributes

选项以添加自定义 CSS 属性选择器,如 "aria-selected", "data-selected", ...etc.

dynamicAttributes: ["aria-selected"]
Edit this page
Prev
快速开始
Next
命令行接口