必须用path.resolve(__dirname, ...)确保路径始终基于配置文件位置解析,避免monorepo中process.cwd()变动导致扫描失效;需显式列出各包路径、覆盖所有文件后缀,且不扫描node_modules。

content 字段配错,Tailwind 就只生成 base 样式,bg-blue-500、text-sm 全都不见——它不报错,也不提示,只是静默丢掉所有 utility 类。
为什么 content 路径必须用 path.resolve?
因为 Tailwind 始终以 process.cwd() 为基准解析路径,而你在 Monorepo 里执行 pnpm build 的位置可能是根目录、apps/web 或任意子包,相对路径如 "../packages/ui/src/**/*" 会指向错误位置。
__dirname 是唯一稳定锚点:它永远指向当前 tailwind.config.js 所在目录。所以必须写成:
const path = require('path');
module.exports = {
content: [
path.resolve(__dirname, '../packages/ui/src/**/*.{js,jsx,ts,tsx}'),
path.resolve(__dirname, '../../apps/admin/src/**/*.{js,jsx,ts,tsx}'),
],
}
- Windows 下反斜杠
\完全兼容,不用转义 - 每个子包应维护自己的
tailwind.config.js,避免多版本行为不一致 - 如果某包用的是
lib目录而非src,路径必须同步改成lib/**/*.{js,jsx,ts,tsx}
content 通配符为什么不能嵌套写?
Tailwind 内置的 glob 解析器(基于 fast-glob)不支持 **/src/** 这类嵌套通配符。写 "./packages/**/src/**/*.{ts,tsx}" 在 v3/v4 中均不可靠——可能只匹配到 packages/foo/src,却漏掉 packages/bar/src。
必须显式列出每一条路径:
- 哪怕有 10 个包,也要逐条写
path.resolve(__dirname, '../packages/button/src/**/*.{js,ts,tsx}') - 后缀要全覆盖:
.vue、.svelte、.astro、.mdx都得单独加上 - 不要把
node_modules路径加进content,除非你明确引用了第三方库的源码(如shadcn-svelte)
Vue / Nuxt / Svelte 等框架的 content 怎么写?
框架模板文件类型不同,content 必须匹配真实扩展名,否则扫描失效:
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
- Vue 项目:至少包含
"./src/**/*.{vue,js,ts,jsx,tsx}",漏掉.ts就扫不到 Composition API 里的动态 class - Nuxt 3:默认生成的
tailwind.config.ts含app.vue和pages/**/*.{vue,ts},但若用了composables/或plugins/里拼接 class,就得手动加进去 - SvelteKit:必须加
"./src/routes/**/*.{svelte,ts}"和"./src/lib/**/*.{svelte,ts}",.svelte后缀不能省
常见错误是把 content 写成空数组或只写 "./src/**/*"——后者不匹配任何文件,因为 Tailwind 要求显式声明后缀。
第三方 UI 库的类名要不要扫?
绝大多数情况下,不要扫。Tailwind 默认跳过 node_modules,这不是 bug,而是设计。
真正该扫的,是你自己写的、调用了第三方组件的文件。比如你在 src/views/Dashboard.vue 里写了 <el-button class="px-4 text-sm"></el-button>,那就要确保这个 .vue 文件在 content 里。
如果硬要扫第三方源码(如 element-plus),必须:
- 确认它发布源码(查
node_modules/element-plus/package.json的exports或module字段) - 路径以
./node_modules/...开头,不能省略./ - 后缀严格匹配其实际文件类型(
.js、.ts、.vue) - 改完必须重启 dev server,缓存不会自动更新
样式异常更大概率来自 preflight 重置,而不是类名没扫到——检查 DevTools 里带 data-tailwind="true" 的 button 规则,再决定是否关掉 corePlugins.preflight。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










