Monorepo 项目实现共享 Tailwind 配置

Tailwind 小笔记 Tailwind 小笔记从一个 .html 文件开始Tailwind Config 自定义样式字体Margin / Padding / Border Width / Border Color "tailwindcss": "^2.2.7" 从一个 .html 文件开始 安装+配置 node.js 初始化 package.json npm init -y 安装 tailwind npm install tailwindcss 新建 src/style.css ​``` project │ 阅读详情
AI摘要

本文介绍了如何在基于turborepo和pnpm的工作区的monorepo项目中,创建一个通用的tailwind.config,以便各包之间共享配置,减少复制和修改,适用于业务包和组件库。涉及内容包括创建package.json、安装依赖、配置文件编写和引用方式,以及处理编译需求的PostCSS和autoprefixer的安装。

本文仅适用于有一定 monorepo 使用经验和原子化 CSS 爱好者。

在这篇文章中,我将介绍如何在 monorepo 项目中实现多个 package 之间共享 tailwind.css 配置,从而避免每次创建一个新包时要复制配置文件、统一配置项需要重复修改多次的问题。

需要注意的是,本文基于 turborepo 和 pnpm 工作区实现,如果你使用 Lerna、NX、Yarn 或者其他可能存在一些差异。

目录结构

用过 turborepo 的同学应该可以了解,它默认模板比其他 monorepo 方案多出了 apps 目录。

- apps
  - docs
  - web
- packages
  - ui
  - tsconfig
  - eslint-config-custom
  - tailwind-config # 这里就是我们要做的通用配置
- package.json

可见,把通用配置、UI 组件这类可以复用的包放在 packages/ 中,而业务相关的项目放在 apps/ 中,这样的目录方案使得项目变得更加清晰。

目前我们有 6 个包,他们分别为:

  • 2 个业务包,docs 和 web,他们通常是可以运行的独立项目。
  • 4 个通用包,ui 是组件库,其他是通用的配置。

可能需要用到 tailwind 通用配置的一般是业务包和 UI 组件包。

创建配置

将 tailwind 配置整合为一个通用的包,可以方便的在其他包里快速引用。

创建 package.json

首先,在 packages/ 目录下创建 tailwind-config 目录,生成一个 package.json:

{
  "name": "tailwind-config",
  "version": "0.0.0",
  "private": true,
  "main": "tailwind.config.ts",
  "types": "tailwind.config.ts",
}

安装依赖

这里我使用的是 pnpm:

pnpm add -F packages/tailwind-config tailwindcss

-F 是 --filter 的缩写,它是 pnpm 提供的参数,用于过滤你想指定的包,它提供了丰富的语法,有兴趣可以阅读参考文档。

pnpm --filter <package_selector> <command>

如果你使用其他包管理器,请自行参考,或者你可以 cd packages/tailwind-config 进行安装即可。

这个包并不需要 autoprefixer 和 postcss,因为它只提供配置文件,不需要参与编译工作。

创建配置文件

创建配置文件,tailwind.config.ts,当然你也可以用 js:

import type { Config } from "tailwindcss";

const config: Config = {
  content: [
    "./src/**/*.{vue,js,ts,jsx,tsx,mdx}",
    "node_modules/ui/**/*.{vue,jsx,tsx}",
  ],
  // ... 其他配置
};

export default config;

这里重点说一下 content 配置,它会影响我们的编译工作。

通常情况下,我们将 content 设置为要读取的模版文件,一般为 html、vue、jsx 等,主要是看你需要 tailwind 去识别哪里的 class。

/**/*.{html,js} 表示这个目录和这个目录下的所有子目录,匹配 html 和 js 文件。

重点

事例代码上还增加了 node_modules/ui/**/*.{vue,jsx,tsx},这是因为我们在引入 packages/ui 这个包时,这里的组件 tailwind 默认不会去识别,导致未变异,样式丢失。

引用配置

这里分为两种引入方式,无需编译和需要编译的情况。

无需编译

这里通常是 packages/ui 这类通用组件库。

与配置包一样,如果你的组件库不需要编译,比如你不打算使用 vue-demi 将你的组件编译成 vue2、vue3 两个兼容版本,那么你只需要在 package.json 中的 devDependencies 添加:

"devDependencies": {
  "tailwind-config": "workspace:*",
}

如果你使用其他包管理器,这里写法不同,请注意。

在 packages/ui/ 目录下创建 tailwind.config.ts:

import type { Config } from 'tailwindcss';
import sharedConfig from 'tailwind-config';

const config: Pick<Config, 'presets'> = {
  presets: [sharedConfig],
};

export default config;

presets 参数的作用是重复使用自己的预设配置。

需要编译

这种通常是 apps/web 这类业务包,它一般都编译于 webpack、vite 这类工具,所以我们除了上文需要做的那些,还有一些特殊配置。

除了 tailwindcss 还需要安装 PostCSS 和 autoprefixer。

pnpm add -F apps/web tailwindcss postcss autoprefixer
  • 为什么要安装 postcss?
    • 因为 tailwind 生成 css 需要通过 PostCSS 工具进行处理。
  • 为什么要安装 autoprefixer
    • autoprefixer 是一个 PostCSS 插件,它确保生成的 CSS 在所有支持的浏览器中都能正常工作。

tailwind.config.ts 的配置方式与上文一致。

再增加一个 postcss.config.js 文件,配置一下 postcss:

export default {
  plugins: {
    tailwindcss: {},
    autoprefixer: {},
  },
}

在源码的 src 目录下或其他位置创建一个 tailwind.css 文件,用于引入 tailwind 样式,并在你的入口文件引入这个 css。

@tailwind base;
@tailwind components;
@tailwind utilities;

如果你使用了其他的 tailwind 插件,也在这里引入。

总结

统一的 tailwind 配置,对于管理同一品牌下的多个 tailwind 项目来说非常有用,实现了颜色、字体和其他常见自定义的配置的唯一来源,使得项目越来越复杂的情况下,也可以轻松实现配置修改。

前端Monorepo实践分享 在前端开发中,Monorepo(单一仓库)实践逐渐成为了一种趋势,许多大型科技公司如Google和Meta等都在实践中采用了Monorepo模式,并取得了显著的效果。例如,Google内部自研了Piper,能够支持基于文件级别的访问控制列表,对代码进行了更加精细化的管理。鉴于Monorepo实践在大型科技公司中的成功应用,以及它所带来的诸多优势,相信在未来,随着前端技术的持续进步和项目规模的不断扩大,Monorepo实践极有可能成为前端开发领域的主流模式之一。 阅读详情

相关推荐

蓄热式加热炉燃烧技术

蓄热式加热炉燃烧技术

weixin_37928884的博客 2733

Vue3项目实战:TailwindCSS配置全流程(含TS支持避坑指南)

本文详细介绍了在Vue3项目中配置TailwindCSS的全流程,特别针对TypeScript环境提供了避坑指南。从环境准备、依赖安装到生产环境优化,涵盖了TailwindCSS与Vue3深度集成的关键配置技巧,帮助开发者高效构建现代化前端应用。

weixin_29001327的博客 281

机械臂开发必备:KDL库正逆解与动力学实战指南

在机器人算法领域,运动学与动力学计算是机械臂控制、仿真与轨迹规划的核心基础。正运动学描述关节空间到笛卡尔空间的映射,逆运动学则需要求解复杂的非线性方程,工程实现时常面临数值稳定性与调试效率的挑战。KDL(Kinematics and Dynamics Library)作为ROS生态中广泛使用的开源库,提供了统一的模型描述与高效求解器,将正逆解、雅可比矩阵及动力学参数计算封装为简洁接口,大幅降低开发门槛。无论是机械臂的笛卡尔空间轨迹跟踪,还是基于动力学模型的前馈控制,KDL都展现出强大的工程价值。本文从运动学

weixin_33860528的博客 2505

构建tailwindcss

【代码】构建tailwindcss。

weixin_53777282的博客 2210

Abaqus小白必看:用Micromechanics Plugin轻松搞定RVE周期性边界条件(附避坑指南)

本文为Abaqus初学者提供了使用官方Micromechanics Plugin插件高效实现复合材料代表性体积单元分析的完整指南。文章详细讲解了从插件安装、模型准备、周期性边界条件自动设置到结果验证的全流程,并重点分享了处理复杂模型和避免常见错误的实用技巧,帮助用户大幅提升RVE分析效率与准确性。

weixin_28363123的博客 796

RPN 解析

RPN全称是Region Proposal Network,Region Proposal的中文意思是“区域选取”,也就是“提取候选框”的意思,所以RPN就是用来提取候选框的网络; 1. RPN的意义 RPN第一次出现在世人眼中是在Faster RCNN这个结构中,专门用来提取候选框,在RCNN和Fast RCNN等物体检测架构中,用来提取候选框的方法通常是Selective Se

lanran2的博客 10万+

vite初始化tailwind(ts)

vite 配置 tailwindcss

weixin_45924425的博客 864

macOS 27下PlayCover“没有权限打开”的完整修复指南

macOS系统通过Gatekeeper、TCC(透明、同意与控制)和安全启动等机制,对第三方应用进行层层校验,以防范恶意代码。这些机制会检查应用的隔离属性、签名状态以及所需系统权限,当任一环节不满足时,就会出现“没有权限打开”的提示。对于开发者工具或未上架App Store的开源软件,这类拦截尤为常见。尤其在macOS 27上,系统进一步收紧了绕过策略,导致PlayCover等工具无法正常启动。本文以PlayCover为例,详细解析权限链路上的三道关卡,并给出清除隔离属性、调整SIP状态、重置TCC记录等完

weixin_32612263的博客 737

Vue Vben Admin 的 Tailwind CSS v4 集成指南:从 theme.css 到 Vite 插件的完整配置解析

本文围绕 Vue Vben Admin 项目中 Tailwind CSS v4 的实际落地方式展开:项目已彻底告别 `tailwind.config.*` 配置文件,改由 [theme.css](https://link.gitcode.com/i/c14f9e17012e299decdd675895fed472) 与共享的 `@vben/vite-config` 统一管理主题定义与扫描范围。读完

gitblog_00978的博客 243

tft_espi 中文字体及自定义字体制作(tft.eSPI模块)

tft.eSPI库自定义字体方法 先下载 processing 然后安装到mixly安装目录下找到tft_eSPI文件夹。

琢磨侠的博客 2762

高级数据结构之R树(R-tree)

R树(R-tree)是一种将B树扩展到多维情况下得到的数据结构,它最初由Antonin Guttman于1984年提出。B树的结点中会存储一个键的集合,这些键把线分成片段,沿着那条线的点仅属于一个片段。因此,B树使得我们可以很容易地找到点。如果把沿线各处的点表示成B树结点,我们就能够确定点所属唯一子结点,在那里可以找到该点。 Antonin Guttman在他提出R树的经典论文中给出的R树例子...

白马负金羁 1万+

如何优雅地组织大型 Tailwind CSS 项目:@source 与多根 CSS 配置技巧

Tailwind CSS 是一款工具类优先(utility-first)的 CSS 框架,它会自动扫描项目中的模板文件来提取类名。当项目规模变大后,扫描范围失控、样式互相污染就成了常见痛点。本文带你掌握 Tailwind CSS 的两项核心配置技巧——**`@source` 指令**与**多根 CSS(Multi-root CSS)**,让你精准控制类名扫描范围,让大型项目的样式既整洁又高效。🚀

gitblog_00192的博客 699

你一直忽略的神器:离你最近的超强语音输入法(微信语音输入全攻略,支持全局混用)

你一直忽略的语音输入工具🎤 ,其实就在身边!无需额外软件,即可实现全局语音转文字⚡ 支持中英文混输,还能与其他输入法混合使用,聊天、办公都能高效完成,让你的输入效率轻松翻倍🚀

XiaoqiangClub的博客 903

Monorepo 下 Stylelint 样式规范工程化实践与配置方案

前端工程化中,样式规范是不可或缺的一环,它直接影响代码可维护性与团队协作效率。Stylelint 作为主流的样式检查工具,通过规则引擎和插件体系能够自动识别并修复 CSS、SCSS、Less 等文件中的质量问题。在 Monorepo 架构下,多包仓库的技术栈差异、依赖版本一致性、扫描性能等挑战让原本简单的配置变得复杂起来。合理利用 Stylelint 的 overrides 机制、配合 pnpm workspace 统一管理依赖,并设计分层配置与增量检查命令,能够在保证规范力度的同时避免误报和性能损耗。无论

weixin_27943395的博客 266

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Tailwind CSS 多根项目支持完全指南:monorepo 与多入口场景实战

Tailwind CSS 多根项目(multi-root)支持,让 monorepo 和多入口应用中**每个 CSS 入口文件只生成自己用到的工具类**。本文带你彻底搞懂 Tailwind CSS 的多根项目机制:它为什么能自动隔离多个入口的样式、`@source` 如何控制扫描范围,以及 Vite / PostCSS 集成下多根构建的完整实战。 ## 什么是多根项目(Multi-Root)?

gitblog_00756的博客 421

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Tailwind配置用法

Kimi: Tailwind CSS 是一个实用性优先的 CSS 框架,由 Adam Wathan 和 Jonathan Reinink 于 2017 年创建,并于 2018 年发布[它通过提供大量的工具类(utility classes),让开发者可以直接在 HTML 中快速构建定制的设计,而无需编写自定义 CSS[它特别适合那些希望在不牺牲设计灵活性的情况下,快速构建现代网站的开发者[它特别适合那些希望在不牺牲设计灵活性的情况下,快速构建现代网站的开发者[],了解更多详细信息和使用方法。

xianyinnm的博客 1802

tailwindcss 使用

3.0可不用配置,默认就是该模式,无法关闭。按需加载样式,定义在extend中的样式也一样,没被用到,不会加载。另外,如果在一个页面中,有动态计算的样式,会因为在编译阶段没有该样式导致不生效;这里的需求是:显示卡片个数根据页面宽度自适应,1600及以上显示4个,以下显示3个。模式下,如果样式可预见,可以在某个页面处固定写死那些动态生成的。模式下动态定义的样式不会解析出来。函数 —— (推荐方式)批量生成配置,从而获得对应。这个最大问题在于只能是。

HYeeee的博客 1868

tailwind使用教程以及tailwind不生效的问题

theme: {// 用于覆盖tailwindcss的默认配置colors: {primary: {},},},},},spacing: {px: '1px',0: '0px',1: '4px',2: '8px',3: '12px',4: '16px',5: '20px',6: '24px',7: '28px',8: '32px',9: '36px',},none: '1',3: '12px',4: '16px',5: '20px',6: '24px',

regretTAT的博客 1万+

第四章:利用Monorepo方式管理组件库生态【前端工程化入门-----从零实现一个react+ts+vite+tailwindcss组件库】

Monorepo 的意思是在版本控制系统的单个代码库包含很多其他项目的代码;Unocss源码就是典型的Monorepo项目;

henu_GM的博客 1268

Vue3配置Tailwind CSS

实用类以相当小的单元准备,因此大多数样式都可以通过仅组合实用类来实现。Tailwind 有大量的实用类,并使用必要的类来进行样式设置,但担心如果加载所有实用类,构建大小会增加。有这么多的类,你可能会认为很难记住这些类,但正如你在上面看到的,text-red-50。Tailwind 的实用类名称是这样命名的,这样你就可以很容易地想象要应用的样式。可以通过在 Tailwind 的配置文件tailwind.config.js。在下面的示例中,根目录中的 index.html。和 tsx 的文件是构建优化的目标。

欢迎来到我的前端博客!这里汇集了关于前端开发的最新技术、实用工具和经验分享。我将为你提供详细的教程、代码示例和实战案例,帮助你掌握Web开发的核心概念和技能。不论你是初学者还是有经验的开发者,这个博客都适合你。 6261

vue3+ts:tailwindcss的配置项详解(theme主题配置篇)

vue3+ts:tailwindcss的配置项详解(theme主题配置篇) 配置文件 直接上官方的默认配置代码,注意content里的作用域 /** @type {import('tailwindcss').Config} */ export default { content: [ "./index.html", "./src/**/*.{vue,js,ts,jsx,tsx}", ], presets: [], darkMode: 'media', // or 'class

2301_76403820的博客 6178

在Vue中引入Tailwind并记录使用过程

tailwindcss

weixin_49022197的博客 2701

【Tailwindcss + ant design】样式不兼容问题解决

今天遇到了一个问题,复现页面代码的时候,不断调整 ant design icon 的 className 与 style,但是都没有效果。修改完成以后,tailwind 就和 ant design 的基本样式不冲突了,也可以使用 tailwind 给 antd 组件编写样式了。后面了解到,如果需要既使用 tailwind 编写样式,也使用 ant design 的组件,就需要把 tailwind 的默认样式关闭。打开 tailwindcss 的配置文件 tailwind.config.ts。

weixin_51076986的博客 3160

tailwind 适配umijs/max

utility-first的css framework。对于我而言,采用tailwind的原因如下:对于react组件,没有纯css级别的组件。从hoc --> react hook,复用了无ui的逻辑,但依旧没有解决跨组件的css解决方案,而tailwind+postcss解决了此问题;而tailwind主题高度定义化,可以说非常方便。

盏茶作酒的博客 2764

Vue学习笔记:手把手教你配置Tailwind

Tailwind CSS 是一个功能类优先的 CSS 框架,它集成了诸如flexpt-4和rotate-90这样的的类,它们能直接在脚本标记语言中组合起来,构建出任何设计。

fu2825666010的博客 895

Vue3,Vite3,TS,Naive-UI整合TailwindCSS

Vue 作者尤大推荐的Vue组件库NaiveUI整合TailwindCSS,以及遇到的一些问题解决办法,使用目前最新的Vue3+Vite3+TS完成本案例

mobaofeibao的博客 7713
上一篇: 盘点那些值得开启的 ESLint 规则
下一篇: 零 rust 基础前端使直接上手 tauri 开发一个小工具
codexu_461229187
博客等级 码龄10年 319粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值