报错“PostCSS plugin tailwindcss requires PostCSS 8”本质是依赖树中混存postcss@7与@8,需删node_modules和package-lock.json后统一安装对齐版本,或老构建链改用@tailwindcss/postcss7-compat兼容包。

直接结论:报错“PostCSS plugin tailwindcss requires PostCSS 8”不是配置写错了,而是 node_modules 里混着 postcss@7 和 postcss@8 两个版本,npm ls postcss 会暴露嵌套依赖里的冲突。
运行 npm ls postcss 看清真实依赖树
这个命令输出里如果出现两行甚至三行 postcss@7.x(尤其嵌套在 autoprefixer@9 或 tailwindcss@3 下面),就说明旧版本没被真正清理掉。Node.js ≥15 后对象属性遍历顺序不可靠,哪怕你写了 postcss@8,加载时仍可能取到子依赖里的 postcss@7。
- 删
node_modules和package-lock.json是必须动作,不能跳过 - 用
npm install -D postcss@latest autoprefixer@latest tailwindcss@latest而不是只装tailwindcss—— 它们仨必须版本对齐 - 如果是 Vue CLI 4 / Webpack 4 等老构建链,别硬升
postcss,改用兼容包:npm install -D tailwindcss@npm:@tailwindcss/postcss7-compat@^3.4 postcss@^7 autoprefixer@^9
postcss.config.cjs 必须用数组写法控制插件顺序
对象写法 { 'tailwindcss': {}, 'autoprefixer': {} } 在 Node.js ≥15 中执行顺序不保证,autoprefixer 可能先于 tailwindcss 运行,结果是空跑——Tailwind 生成的规则还没出来,Autoprefixer 就处理完了。
- 正确写法是数组:
plugins: [ require('tailwindcss'), require('autoprefixer') ] - 若用了
postcss-modules(比如.module.css场景),它必须排在tailwindcss前面,否则生成的选择器哈希名(如.Button_button__abc123)和 Tailwind 输出的原始类名(如.p-4)对不上 - Vite 项目中如果已装
@tailwindcss/vite,直接删掉postcss.config.cjs更安全——它会自动注入,手动配反而干扰
旧浏览器白屏或样式静默失效,大概率是 Tailwind v4 的语法特性不被支持
Tailwind v4 默认启用 @layer、oklch() 颜色、@property 等原生 CSS 特性,Chrome 109、iOS Safari ≤13.3、Android WebView ≤11 等环境根本无法解析,整段 CSS 规则被丢弃,连错误提示都没有。
立即学习“前端免费学习笔记(深入)”;
-
postcss-preset-env对@layer和@property完全无效,别浪费时间配它 - 手动把
theme.colors改成rgb()没用——v4 内部 color 插件会强制重写为oklch() - 唯一稳态解:降级到
tailwindcss@3+daisyui@4,它们输出纯 CSS2.1 + Flex/Grid 兼容代码,经大量旧环境验证
最容易被忽略的一点:Tailwind v4 的插件名在 postcss.config.cjs 里必须写成 require('tailwindcss'),而不是 '@tailwindcss/postcss'——后者根本不存在,是过时文档遗留的误导。


















