npm 使用使用TailwindCSS的组件库

mwyxok5s  于 2023-03-30  发布在  其他
关注(0)|答案(3)|浏览(217)

我们有一个使用TailwindCSS的组件库(VueJS),我们将把它作为私有npm包发布。
1.我们如何在组件库中公开tailwind.config.js,以便消费项目可以使用组件库中的设置,例如消费项目的tailwind.config.js中的颜色。
1.有没有推荐的方法来“继承”组件库中定义的样式?
1.而且由于TailwindCSS V3使用JIT来生成类,我如何在组件库中包含这些类?

u3r8eeie

u3r8eeie1#

对于1和2,看起来你的组件库可以导出一个Tailwind plugin,一个消费项目将在他们自己的Tailwind配置中注册。
plugin()的第二个参数可以是您的组件库希望与用户的Tailconfig配置合并的任何配置。
例如:

// plugin.js
const plugin = require('tailwindcss/plugin')

const myComponentLibraryConfig = {
  theme: {
    extend: {
      colors: {
        salmon: 'salmon'
      }
    }
  }
}

module.exports = plugin(({ addUtilities, addComponents, e, config }) => {
  // Add your custom styles here
}, myComponentLibraryConfig),

将组件库发布为包时,请确保包含插件。
然后,在您的消费项目中:

// tailwind.config.js

module.exports = {
    //...
    plugins: [
        require('my-component-library/plugin')
    ]

}

对于3,看起来你可能需要显式地将你的组件库的组件的位置添加到content部分。

// tailwind.config.js

module.exports = {
    content: [
        "./node_modules/my-component-library/**/*.js",
        "./src/components/**/*.{js,jsx,ts,tsx}", // or whatever
    ]
}

事情的实际路径将取决于您的项目结构,但希望您能得到这个想法。

ee7vknir

ee7vknir2#

不久前,我不得不这样做,我们为我们的顺风组件库使用了rollup。我安装了rollup的复制插件(来自他们的官方plugin list),在我的rollup.config.js中,我有这样的效果:

import copy from "rollup-plugin-copy";

const config = {
  plugins: [
      copy({
        targets: [
          {
            src: "./tailwind.config.js",
            dest: "dist",
          }
        ]
      })
  ]
}
export default config;

因此,将该文件复制到输出中,并在使用该库的任何应用程序中使用该文件,如下所示:

//tailwind.config.js
const commonConfig = require("component_library/dist/tailwind.config.js")
module.exports = { ...config }

这可以解决你的第一和第二个问题。我记得在Tailwind文档的某个地方阅读到过支持这一点,但不记得是在哪里了。你也可以在消费类应用中使用基本的重构来覆盖,如下所示:

//tailwind.config.js
const commonConfig = require("component_library/dist/tailwind.config.js")

module.exports = {
  ...commonConfig,
  plugins: [
    ...commonConfig.plugins,
    require("@tailwindcss/line-clamp"),
  ],
}

至于问题#3,我能够使用@harryg的方法,将"./node_modules/my-component-library/dist/*.js"添加到我的组件库中的tailwind.config.js中,当我将该配置导入到消费者应用程序时,它能够选择所有需要编译的样式/类,而不需要从库中导出整个tailwind样式表。希望这有所帮助。

vc9ivgsu

vc9ivgsu3#

我只是通过在dist文件夹中提供配置来完成这一点,作为设计系统的一部分:

./src/assets/tailwind/config.js

const content = [
    './index.html',
    './src/**/*.{vue,js,ts,jsx,tsx}',
];

// theme values to be shared
const theme = {};

const plugins = [
    '@tailwindcss/line-clamp',
];

module.exports = {
    defaultContent: content,
    defaultTheme: theme,
    defaultPlugins: plugins,
};

./顺风配置js

const { defaultContent, defaultTheme, defaultPlugins } = require('./src/assets/tailwind/config');

module.exports = {
  content: [
    ...defaultContent,
  ],
  theme: {
    ...defaultTheme,
  },
  plugins: [
    ...defaultPlugins.map(plugin => require(plugin)),
  ],
}

我还有一个汇总构建步骤,它执行以下操作:

"scripts": {
    "publish:lib": "normalstuff && node build-meta",
},

/build-meta.js**

const fs = require('fs-extra');
const path = require('path');

fs.copySync(path.resolve(__dirname, './src/assets/tailwind/config.js'), 'dist/assets/tailwind-defaults.js');
// I learned this technique from PrimeVue (so check their GitHub repo)

消费应用

const { defaultContent, defaultTheme, defaultPlugins } = require('@yolo-inc/package-name/assets/tailwind-defaults');

module.exports = {
  content: [
    ...defaultContent,
  ],
  theme: {
    ...defaultTheme,
  },
  plugins: [
    ...defaultPlugins.map(plugin => require(plugin)),
  ],
}

相关问题