是,Next.js 14 已将 App Router 作为默认架构,传统的 Pages Router 已进入维护阶段;其核心能力包括 Server Components、Layouts、Streaming、Server Actions 以及 Edge 运行时优化。

确认 Next.js 14 是否已启用 App Router
在 Next.js 14 中,App Router 已成为默认且推荐的方案。不过,Tailwind CSS 的按需生成机制(也就是扫描 content 路径来提取 class)在 App Router 与 Pages Router 下的配置方式略有差异。如果你的项目是通过 create-next-app 创建,且没有手动切回旧架构,那么大多数情况下就是 App Router。这也意味着,你的 tailwind.config.js 中 content 配置必须包含 app/**/*.{js,ts,jsx,tsx}。
你可以先检查项目根目录中是否存在 app/layout.tsx 或 app/page.tsx;如果存在,基本可以确认项目使用的是 App Router。若没有,则可能仍在使用 Pages Router,这时要特别确认 pages/**/*.{js,ts,jsx,tsx} 是否已经加入扫描路径。
- App Router 项目必须在
content中明确加入app/**/*.{js,ts,jsx,tsx},否则组件里写的 class 无法被 Tailwind 识别,最终表现为样式失效 - Pages Router 也是同样的逻辑,需要补上
pages/**/*.{js,ts,jsx,tsx},遗漏后就等于没有正确开启按需生成 - 如果项目同时使用了
app和pages两套目录结构,那么两个路径都必须完整配置,否则部分页面或组件中的 class 会被漏扫
配置 tailwind.config.js 开启真正按需生成
Tailwind CSS 默认就支持按需生成,但这个“按需”是否生效,完全取决于 content 配置是否准确。它不会自动扫描项目中所有 JS/TS 文件,而只会处理你手动声明的 glob 路径。很多开发者在 Next.js 14 项目里配置完 Tailwind 后发现类名不生效,问题通常不是 Tailwind 出错,而是 content 少了目录、扩展名或文件类型。
一个常见且适用于 App Router 的 tailwind.config.js 配置通常如下:
/** @type {import('tailwindcss').Config} */
module.exports = {
content: [
"./app/**/*.{js,ts,jsx,tsx}",
"./components/**/*.{js,ts,jsx,tsx}",
"./layouts/**/*.{js,ts,jsx,tsx}",
],
theme: {
extend: {},
},
plugins: [],
}
./app/**/*.{js,ts,jsx,tsx}是 App Router 项目的关键配置项,前面的./不建议省略,否则在某些构建环境下可能无法正确匹配- 像
components这样的自定义组件目录也要手动加入,因为 Tailwind 不会自动判断你的 UI 组件存放位置 - 不要使用类似
**/*.tsx这种过于宽泛的写法,Next.js 构建过程中可能因为性能优化而导致扫描不稳定,反而增加漏扫风险 - 如果项目中使用了 MDX,例如
app/blog/[slug]/page.mdx,还需要补充./app/**/*.{mdx},否则 MDX 文件里的 class 不会被打包进最终 CSS
验证按需生成是否真生效
想确认 Tailwind CSS 按需生成是否真正启用,最直观的方法是在某个 app/page.tsx 文件中临时加入一个不常见的 class,例如 bg-[#1a2b3c] 或 text-7xl(默认主题中未必定义了 7xl),然后观察浏览器页面是否正确渲染。如果没有效果,就说明按需生成链路没有打通——最常见的原因仍然是 content 没有覆盖该文件,或者扩展名未配置完整。
- 执行
npm run dev后,打开浏览器开发者工具,查找生成的标签,再用 Ctrl+F 搜索刚写的 class 名;如果能找到,说明 Tailwind 已成功提取该样式 - 可以临时删除
content数组中的某一项(例如注释掉./components/**/*),然后修改组件中的 class,刷新后样式若消失,就能证明 Tailwind 确实是按路径进行按需扫描的 - 需要注意的是,开发环境中的热更新可能会缓存旧的 CSS 结果,必要时可手动删除
.next目录后重新启动项目,以避免误判
别忽略 PostCSS 和全局 CSS 加载顺序
Tailwind CSS 依赖 PostCSS 插件链来完成编译,而 Next.js 14 通常已经内置了这部分能力。不过,如果你手动删除了 postcss.config.js,或者修改了 next.config.js 中与 postcss 相关的配置,就可能导致整个样式处理流程中断。此外,在全局样式文件中(例如 app/globals.css),必须保留 @tailwind base;、@tailwind components; 和 @tailwind utilities; 这三条指令,少任意一条都可能让对应层级的样式无法正常输出。
- 确认
app/globals.css顶部包含完整的三行@tailwind指令,并且顺序必须正确:base → components → utilities - 如果项目中使用了 CSS Modules(如
Component.module.css),在这类文件里写@tailwind指令是不会生效的,因为 Tailwind 只会从全局 CSS 文件中处理这些入口声明 - 若接入了自定义插件,例如
@tailwindcss/forms,除了先安装对应依赖外,还要在tailwind.config.js的plugins数组中完成注册,否则相关 class 可能无法正确解析且不易察觉
需要明确的是,Tailwind CSS 的按需生成并不存在一个单独的“开关按钮”,它本质上完全由 content 配置驱动。而这个驱动是否有效,关键就在于你是否让 Tailwind 能准确“看见”所有使用 class 的文件。只要路径写错、文件后缀遗漏,或者全局 CSS 缺少必要指令,都会让你误以为“按需生成没有开启”,实际上只是 Tailwind 根本没有扫描到对应内容。
