如何从 Tailwind 中拆分生成的 CSS 代码?

Posted

技术标签:

【中文标题】如何从 Tailwind 中拆分生成的 CSS 代码?【英文标题】:How to split generated CSS code form Tailwind? 【发布时间】:2019-11-04 23:29:03 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

首先,从postcss.config.js 中删除所有顺风代码。然后在包含文件的文件夹中创建tailwind.config.js,即使用tailwind类。

这是我的基本演示示例。

文件夹中有两个文件:

App.vue
tailwind.config.js

App.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 文件,如下所示:

.flexdisplay:flex.flex-colflex-direction:column.flex-no-wrapflex-wrap:nowrap.items-centeralign-items:center.justify-centerjustify-content:center.content-centeralign-content:center#appcolor:red

问题,我仍然有:

如果多个文件(在一页上动态加载)使用相同的类,则 css 代码会重复 我需要多个配置文件 + 每个文件夹只有一个配置文件。 主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: []
;

【讨论】:

所以,我可以通过修复配置文件:path.resolve(__dirname, "../../../../views/base.blade.php").blade.php 获取课程。如果我知道动态加载的资产的顺序,并且有一些 purge-css 选项可以强制清除配置文件中指示的类,那么问题 1 似乎也得到了解决。将继续调查。

以上是关于如何从 Tailwind 中拆分生成的 CSS 代码?的主要内容,如果未能解决你的问题,请参考以下文章

如果在 className 中使用变量,则 React/Next.js 中的 Tailwind 不会为 text-*xl 类生成 css

在 Tailwind CSS 和 Laravel 中添加字体

当使用 Tailwind CSS 单击按钮时,从屏幕左侧制作侧边栏滑动

Vue CLI + Tailwind:使用 CSS 变量进行主题化

Tailwind.css — 如何使用 Tailwind 实现 last-child?

如何将@tailwind CSS 规则添加到 CSS 检查器