如何与 Ant Design 一起使用

提示

本页面的内容来自 此问题在新窗口中打开

PurgeCSS 通过将内容文件中的选择器与 CSS 文件中的选择器进行比较来工作。当使用具有自己 CSS 的组件库时,会发生 CSS 被删除的情况,因为找不到内容。然后,你需要指定可以在哪里找到内容。

对于 ant-design,无法从其内容中轻松检索 ant-design 中使用的选择器列表。

以下是将 PurgeCSS 与 Ant Design 和 React 一起使用的方法。该项目是使用 create-react-app 创建的。然后,它使用 react-app-rewired 来扩展配置。

const glob = require("glob-all");
const paths = require("react-scripts/config/paths");

const { override, addPostcssPlugins } = require("customize-cra");

const purgecss = require("@fullhuman/postcss-purgecss")({
  content: [
    paths.appHtml,
    ...glob.sync(`${paths.appSrc}/**/*.js`, { nodir: true }),
    ...glob.sync(`${paths.appNodeModules}/antd/es/button/**/*.css`, {
      nodir: true,
    }),
  ],
  extractors: [
    {
      extractor: (content) => content.match(/([a-zA-Z-]+)(?= {)/g) || [],
      extensions: ["css"],
    },
  ],
});

module.exports = override(
  addPostcssPlugins([
    ...(process.env.NODE_ENV === "production" ? [purgecss] : []),
  ])
);

我基本上添加了一个路径到我想要保留的 antd css 文件。在下面的示例中,button

...glob.sync(`${paths.appNodeModules}/antd/es/button/**/*.css`,

要完全保留 antd,你可以替换为

...glob.sync(`${paths.appNodeModules}/antd/es/**/*.css`,

并为打算从文件中获取选择器的 css 文件编写一个提取器

  extractors: [
    {
      extractor: (content) => content.match(/([a-zA-Z-]+)(?= {)/g) || [],
      extensions: ["css"],
    },
  ],