如何在 Next.js 项目中配置 Tailwind CSS 的 Prettier 自动排序(2026 版)
Sawana Huang - Sun May 19 2024
按当前官方文档重写的 Tailwind CSS + Prettier 配置教程,讲清楚 package.json、prettier.config.js、VSCode 接入,以及类名自动排序到底怎么生效。
这篇文章把 2024 年那版旧文重新收了一遍。核心思路没错,还是 prettier-plugin-tailwindcss 接管格式化,但旧文里有几个地方会让人绕路:
- 只提了
package.json配置,没有讲现在更常见的prettier.config.js - “排序前后”的示例写成了同一段代码,读者根本看不出变化
- 没有讲 VSCode 为什么有时装了插件还是不生效
如果你现在在用 Next.js + Tailwind CSS,想让保存文件时自动排好类名,这篇就够了。
先把能用的配置贴出来
到 2026 年,这件事本身还是很简单:
- 安装
prettier和prettier-plugin-tailwindcss - 在
prettier.config.js或package.json里声明插件 - 确保编辑器真的在用 Prettier 作为 formatter
我现在会直接这样配:
/** @type {import('prettier').Config} */
module.exports = {
plugins: ["prettier-plugin-tailwindcss"],
};只要这三步都到位,Tailwind 的 class 排序通常就会自动生效。
什么时候你需要这个插件
你大概会在这些时候开始需要它:
className越写越长,读起来很乱- 团队里每个人写 Tailwind 的顺序都不一样
- 代码 review 时经常出现无意义的 class 顺序变更
- VSCode 能格式化代码,但 Tailwind 类名并没有按官方顺序重排
这个插件的价值不在于“更漂亮”,而在于让 Tailwind class 顺序变成一件不用思考的事。
package.json 还是 prettier.config.js
两种写法都能工作。我更偏向独立的 Prettier 配置文件:
package.json- 适合配置极少、项目很小的时候
prettier.config.js- 适合中长期项目
- 更清楚
- 后面加更多 Prettier 选项时不容易乱
如果你的项目里已经有 prettier.config.js,那就不要再把同一份配置塞回 package.json 了,直接在现有配置上加插件即可。
完整配置步骤
2. 用 standalone 配置文件接入插件
如果你的项目还没有 Prettier 配置文件,就在根目录新建 prettier.config.js:
/** @type {import('prettier').Config} */
module.exports = {
plugins: ["prettier-plugin-tailwindcss"],
};如果你已经有了配置文件,那么只需要把 plugins 合并进去:
/** @type {import('prettier').Config} */
module.exports = {
semi: true,
singleQuote: false,
plugins: ["prettier-plugin-tailwindcss"],
};这样写比把配置塞进 package.json 更清楚,后面加别的选项也不容易乱。
3. 如果你更喜欢,也可以继续放在 package.json
这不是错误写法,今天仍然能用:
{
"prettier": {
"plugins": ["prettier-plugin-tailwindcss"]
}
}如果项目非常小,而且你确定不会继续扩展 Prettier 配置,这种方式也完全够用。
但只要项目开始长大,我还是建议迁移到 prettier.config.js。
4. 看清楚“排序前”和“排序后”的区别
下面这段 className 是故意打乱顺序的。为了避免本文自己的 Prettier 插件把“错误示例”也自动改正,我这里先用纯文本展示“排序前”:
<div className="lg:px-16 text-white rounded-lg sm:px-8 shadow-md px-4 bg-blue-500">
Hello World
</div>经过 Prettier + Tailwind 插件处理后,通常会变成:
<div className="rounded-lg bg-blue-500 px-4 text-white shadow-md sm:px-8 lg:px-16">
Hello World
</div>重点不在于把顺序背下来,而在于以后不用再手动整理它。
5. 让 VSCode 真的用 Prettier 来格式化
很多人以为“插件没生效”,其实是编辑器根本没有把 Prettier 当成默认 formatter。
最常见的做法是:
- 安装 VSCode 扩展
Prettier - Code formatter - 打开设置,确认当前语言使用 Prettier
- 开启
format on save
如果你喜欢直接写 settings,可以参考:
{
"editor.formatOnSave": true,
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
}做到这一步后,保存文件时就应该能看到 class 顺序被自动改写。
两个最常见的“不生效”原因
1. 你装了插件,但编辑器没在用 Prettier
这是最常见的问题。VSCode 可以同时安装多个 formatter,如果默认 formatter 不是 Prettier,Tailwind 插件自然不会运行。
2. 你改了 package.json,但项目里其实已经有 prettier.config.js
如果两个地方都写了配置,后续排查会变得很混乱。最稳妥的策略是:
- 二选一
- 对中大型项目优先使用 standalone 配置文件
进阶:如果你想让插件处理更多地方
根据 prettier-plugin-tailwindcss 官方仓库,这个插件除了能排序常见的 class / className,还支持扩展到更多属性和函数调用。
例如,你可以进一步配置:
/** @type {import('prettier').Config} */
module.exports = {
plugins: ["prettier-plugin-tailwindcss"],
tailwindAttributes: ["myClassList"],
tailwindFunctions: ["clsx", "cva"],
};这类配置不是入门必需,但当你的项目开始大量使用 clsx、cva 或自定义属性时,会非常有价值。
这次顺手改掉的几个坑
这次主要收掉了这些问题:
- 把标题和正文中的
Tailwindcss、Nextjs、pretier改成正确写法 - 明确区分了
package.json配置和prettier.config.js配置 - 修正了原文里“排序前后示例一样”的错误
- 补上了 VSCode 默认 formatter 这个最关键的排障点
- 补上了插件的进阶能力,没有停在最小配置那一步
总结
这事说到底只有两个检查点:插件有没有装好,编辑器是不是确实在调用 Prettier。两边都对了,Tailwind 类名排序基本就会自己工作。对新项目,我会直接建 prettier.config.js;对旧项目,先把配置收拢到一个地方,再确认 format on save 和默认 formatter 没跑偏。
参考资料
- Automatic Class Sorting with Prettier - Tailwind CSS
- prettier-plugin-tailwindcss
- Prettier Configuration File
- Prettier VSCode Extension