6

我正在寻找一种解决方案,将 Tailwind PostCSS 插件(与 purgecss 插件结合使用)生成的大 CSS 文件拆分为多个 CSS 文件(每个消费者 JS 文件一个 CSS 文件)。可以通过查看 JS 文件中使用的选择器(即类名,如 p-1 和 m-1)来检测 JS 文件使用的 CSS 规则。

知道如何实现这一目标或类似的东西吗?

4

1 回答 1

6

我能够部分解决这个问题。

首先,从postcss.config.js. 然后tailwind.config.js在包含文件的文件夹中创建,即使用尾风类。

这是我的基本演示示例。

文件夹中有两个文件:

App.vue
tailwind.config.js

应用程序.vue:

<template>
  <div
    id="app"
    class="flex flex-col flex-no-wrap items-center content-center justify-center"
  >
    {{ message }}
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: "I'm from vue file"
    };
  }
};
</script>

<style lang="scss">
@import "scss/dynamic/tailwind.scss";

#app {
  color: $red;
}
</style>

scss/dynamic/tailwind.scss(在任何文件中轻松访问tailwind):

@tailwind components;
@tailwind utilities;

tailwind.config.js:

module.exports = {
  purge: {
    mode: "all",
    content: [__dirname + "/App.vue"]
  },
  theme: {},
  variants: {},
  plugins: []
};

webpack.config.js(仅 css 部分):

...
{
  test: /\.(sa|sc|c)ss$/,
  use: [
    MiniCssExtractPlugin.loader,
    "css-loader",
    {
      loader: "postcss-loader",
      options: {
        plugins: env => {
          const dir = env._module.context;
          const config = dir + "/tailwind.config.js";

          return fs.existsSync(config)
            ? [require("tailwindcss")(config)]
            : [];
        }
      }
    },
    {
      loader: "sass-loader",
      options: {
        data: `@import "scss/static/abstracts";`
      }
    }
  ]
}
...

最后我有一个动态加载的css文件,如下所示:

.flex{display:flex}.flex-col{flex-direction:column}.flex-no-wrap{flex-wrap:nowrap}.items-center{align-items:center}.justify-center{justify-content:center}.content-center{align-content:center}#app{color:red}

问题,我仍然有:

  • 如果多个文件(在一页上动态加载)使用相同的类,则重复 css 代码
  • 我需要有多个配置文件 + 每个文件夹只有一个配置文件。
  • main 的配置文件app.scss看不到文件中的类.blade.php,可能与文件路径有关:
const path = require("path");

module.exports = {
  purge: [
    path.resolve("../../../../views/base.blade.php"),
    path.resolve("../../../../views/page/home.blade.php")
  ],
  theme: {},
  variants: {},
  plugins: []
};
于 2020-05-21T15:16:48.100 回答