我们有一个使用TailwindCSS的组件库(VueJS),我们将把它作为私有npm包发布。1.我们如何在组件库中公开tailwind.config.js,以便消费项目可以使用组件库中的设置,例如消费项目的tailwind.config.js中的颜色。1.有没有推荐的方法来“继承”组件库中定义的样式?1.而且由于TailwindCSS V3使用JIT来生成类,我如何在组件库中包含这些类?
tailwind.config.js
u3r8eeie1#
对于1和2,看起来你的组件库可以导出一个Tailwind plugin,一个消费项目将在他们自己的Tailwind配置中注册。plugin()的第二个参数可以是您的组件库希望与用户的Tailconfig配置合并的任何配置。例如:
plugin()
// 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部分。
content
// tailwind.config.js module.exports = { content: [ "./node_modules/my-component-library/**/*.js", "./src/components/**/*.{js,jsx,ts,tsx}", // or whatever ] }
事情的实际路径将取决于您的项目结构,但希望您能得到这个想法。
ee7vknir2#
不久前,我不得不这样做,我们为我们的顺风组件库使用了rollup。我安装了rollup的复制插件(来自他们的官方plugin list),在我的rollup.config.js中,我有这样的效果:
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样式表。希望这有所帮助。
"./node_modules/my-component-library/dist/*.js"
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)), ], }
3条答案
按热度按时间u3r8eeie1#
对于1和2,看起来你的组件库可以导出一个Tailwind plugin,一个消费项目将在他们自己的Tailwind配置中注册。
plugin()
的第二个参数可以是您的组件库希望与用户的Tailconfig配置合并的任何配置。例如:
将组件库发布为包时,请确保包含插件。
然后,在您的消费项目中:
对于3,看起来你可能需要显式地将你的组件库的组件的位置添加到
content
部分。事情的实际路径将取决于您的项目结构,但希望您能得到这个想法。
ee7vknir2#
不久前,我不得不这样做,我们为我们的顺风组件库使用了rollup。我安装了rollup的复制插件(来自他们的官方plugin list),在我的
rollup.config.js
中,我有这样的效果:因此,将该文件复制到输出中,并在使用该库的任何应用程序中使用该文件,如下所示:
这可以解决你的第一和第二个问题。我记得在Tailwind文档的某个地方阅读到过支持这一点,但不记得是在哪里了。你也可以在消费类应用中使用基本的重构来覆盖,如下所示:
至于问题#3,我能够使用@harryg的方法,将
"./node_modules/my-component-library/dist/*.js"
添加到我的组件库中的tailwind.config.js中,当我将该配置导入到消费者应用程序时,它能够选择所有需要编译的样式/类,而不需要从库中导出整个tailwind样式表。希望这有所帮助。vc9ivgsu3#
我只是通过在dist文件夹中提供配置来完成这一点,作为设计系统的一部分:
./src/assets/tailwind/config.js
./顺风配置js
我还有一个汇总构建步骤,它执行以下操作:
/build-meta.js**
消费应用