lightning css 不是 postcss 升级版,而是定位不同的高速标准 css 处理器:它零容错、无插件、不支持预处理器语法,需上游严格清理输入(如 sass、@tailwind 必须前置编译),配置需显式切换 transformer 与 cssmodules,错误时默认硬终止,依赖干净输入与明确浏览器目标才能发挥速度优势。

Lightning CSS 不是 PostCSS 的“升级版”,而是定位不同的工具:它不接受插件链,也不处理预处理器语法,只对标准 CSS 做高速解析、转换与压缩。想用它替代 PostCSS,前提是你的项目已剥离 Sass/Less、@tailwind、@apply 等非标准语法——否则直接报错退出。
必须先清理输入:Lightning CSS 只认合法标准 CSS
Lightning CSS 解析器零容错,遇到任何语法异常(比如漏分号、@apply、@mixin、Sass $var)就抛 ParseError 并终止构建。它不模拟浏览器宽容解析,也不做 warning fallback。
- 所有
.scss/.less文件必须经sass-loader或less-loader编译为纯 CSS 后再交给 Lightning CSS -
@tailwind、@layer必须由 Tailwind CLI 或tailwindcss插件前置处理完,输出为普通 CSS;不能让 Lightning CSS 直接读src/index.css里带@tailwind base的文件 -
@import url('./vars.css')中的vars.css必须是标准 CSS(不能含@value或自定义语法) - 嵌套写法(
&:hover)需显式开启草案支持(lightningcssv1.22+ 支持nesting: true),但不支持@extend或@mixin
配置 Vite 时必须显式切换 transformer 和 cssModules
Vite 不会自动降级或合并配置项。css.transformer: 'lightningcss' 和 css.modules 是互斥路径,混用会导致模块失效。
- 安装依赖:
npm add -D lightningcss(注意是-D) - 启用 transformer:
css.transformer = 'lightningcss',不是build.cssMinify - CSS Modules 必须用
css.lightningcss.cssModules,例如:css: { transformer: 'lightningcss', lightningcss: { cssModules: { scopeBehaviour: 'local' } } } - 若仍保留
css.modules: true,Lightning CSS 完全不接管模块逻辑,类名无哈希、composes失效、:global()不识别
错误中断无法绕过,开发阶段得加 errorRecovery 或封装兜底
PostCSS 下常见的拼写错误(如 dispay: flex、backgound: red)在 Lightning CSS 中会直接触发 FatalError,Vite 开发服务器崩溃退出,没有 warning + HMR 继续。
-
errorRecovery: true是部分版本支持的选项,加在css.lightningcss下可避免硬退出,但会跳过出错规则,不保证样式完整性 - 更稳妥做法:开发时关掉
transformer,仅构建时启用;或引入vite-plugin-lightningcss这类封装插件,内部捕获ParseError并回退到 PostCSS - 典型致命报错:
Unknown at rule "@apply"、Expected semicolon、Unexpected token '.'(来自未编译的嵌套选择器)
浏览器目标必须明确,且前缀策略不可插件化
Lightning CSS 把 browserslist 编译成位图索引,在解析 token 阶段就查表决定是否保留 gap、是否注入 -webkit-,不走 PostCSS 那套运行时兼容性树遍历。
- 必须在
package.json或独立.browserslistrc中声明目标,例如:"> 1%", "last 2 versions", "not dead" - 不支持
autoprefixer的自定义前缀白名单、remove: false等精细控制,所有前缀行为由目标浏览器集合唯一确定 - 不支持
postcss-preset-env那类“渐进增强”转换(如将:has()降级为 JS 检测),只做 CSS 层面的安全降级 - 如果你依赖
color-mix()转rgb()或lab(from ...)转hsl(),确保目标浏览器列表不含不支持这些特性的旧版本,否则会被直接移除
真正快的前提,是输入干净、目标清晰、错误容忍度低——它不是拿来即用的 PostCSS 替换按钮,而是一条需要上游严格把关的高速流水线。漏掉任何一个预处理环节,或者误配模块开关,都会让速度优势瞬间归零,甚至比 PostCSS 更难调试。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











