Lightning CSS 是 Rust 编写的高性能 CSS 后处理器,只接受标准 CSS 输入,不支持 Sass/Less 等非标准语法,需前置转译;它内置压缩、降级、前缀等能力,但不替代预处理器或插件化 PostCSS,而是作为更高效、类型安全的纯 CSS 处理环节。

Lightning CSS 不是 PostCSS 的“更快替代品”,而是定位不同的工具——它不依赖插件链,不运行 JS 插件,也不处理非标准语法。想用它加速构建,关键不是“替换 PostCSS”,而是把原本由 PostCSS 做的几类事,交给更合适的环节处理。
lightningcss 只接受标准 CSS 输入,不解析 Sass/Less/Tailwind JIT
常见错误现象:lightningcss 报错 Unexpected token '@' 或 Unknown at rule @use,本质是它根本没设计支持预处理器语法。
使用场景:你必须确保输入给 lightningcss 的是已转译完成、符合 CSS 规范的纯文本(即“PostCSS 的输出”,而非“Sass 的输出”)。
- Vue SFC 中的
<style></style>需先经vite-plugin-lightningcss或unocss处理,不能直接喂给 CLI - Tailwind 用户必须先运行
tailwindcss -i input.css -o output.css生成完整 CSS,再让lightningcss压缩;它不运行 Tailwind 的 JIT 引擎 - Sass 项目需保留
sass编译步骤,仅将最终产出的.css文件接入lightningcss
vite.config.ts 中启用 lightningcss 需改写全部 css 相关配置项
错误写法:css: { postcss: { ... } } 或沿用 css.modules —— 这些对 lightningcss 完全无效,会被忽略。
正确做法是切换整个 CSS 处理栈:
- 设置
css.transformer: 'lightningcss'启用解析器 - 浏览器目标改用
css.lightningcss.browserslist,而非postcss.config.js中的browserslist - CSS Modules 配置移到
css.lightningcss.cssModules,字段名和结构与 PostCSS 不同 - 禁用
esbuild的默认 CSS 压缩(Vite 默认用它),否则会重复压缩或冲突
示例片段:
export default defineConfig({
css: {
transformer: 'lightningcss',
lightningcss: {
browserslist: ['> 1%', 'last 2 versions'],
cssModules: { classNameStrategy: 'stable' }
}
}
})
合并长属性(如 margin)只在单位一致且语义安全时发生
为什么你写的 margin: 10px 0 1em 0 没被压缩成 margin: 10px 0 1em?这不是 bug,是设计使然。
lightningcss 对属性值做强类型解析,px 和 em 属于不同数值域,无法合并;calc()、var(--x)、混合单位都会导致跳过该属性优化。
- 能合并的典型场景:四个值两两相等(
margin: 10px 20px 10px 20px→margin: 10px 20px) - 颜色简化自动生效:
rgb(255, 0, 0)→#f00,但hsl(0, 100%, 50%)不会转,除非目标浏览器明确支持 - 想验证是否被合并?加
--source-map输出 map,比对输入输出 AST 中Margin节点结构
autoprefixer 仍应前置,lightningcss 的 --browserslist 支持有限
如果你的项目需兼容 IE 或旧版 Android Browser,别指望 lightningcss --browserslist "ie 11" 自动补全所有前缀——它的前缀数据库覆盖不如 autoprefixer 全面,且不支持自定义前缀规则。
推荐流程仍是:PostCSS + autoprefixer(负责前缀)→ 标准 CSS → lightningcss(负责压缩/合并/降级)。
真正难控的不是压缩率数字,而是团队里没人明确回答:“谁负责把嵌套语法转成标准 CSS?谁负责决定要不要保留 /* @preserve */ 注释?” lightningcss 越快,越容易暴露上游输出是否已足够干净。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











