Lightning CSS
问题
Lightning CSS 是什么?它如何替代 PostCSS + Autoprefixer?
答案
Lightning CSS 是用 Rust 编写的 CSS 解析器、转换器和压缩器,比 PostCSS 快 100 倍以上。Parcel 默认使用它,Vite 也已集成支持。
关于 PostCSS 原理,可参考 PostCSS 与 Autoprefixer。
Lightning CSS vs PostCSS
| 维度 | PostCSS + Autoprefixer | Lightning CSS |
|---|---|---|
| 语言 | JavaScript | Rust |
| 速度 | 1x | 100x+ |
| 功能 | 插件驱动 | 内置:前缀、降级、压缩、CSS Modules |
| Browserslist | 通过 Autoprefixer | 内置支持 |
| CSS Nesting | 需要插件 | 内置 |
| CSS Modules | 需要 postcss-modules | 内置 |
| 压缩 | cssnano(慢) | 内置(极快) |
在 Vite 中使用
vite.config.ts
export default defineConfig({
css: {
transformer: 'lightningcss',
lightningcss: {
targets: browserslistToTargets(
browserslist('>= 0.25%')
),
// 自动添加浏览器前缀
// 自动降级新 CSS 语法
// 内置 CSS Modules 支持
},
},
build: {
cssMinify: 'lightningcss', // 用 Lightning CSS 压缩
},
});
内置的 CSS 转换能力
Lightning CSS 一个工具替代了多个 PostCSS 插件:
| PostCSS 插件 | Lightning CSS 内置 |
|---|---|
| autoprefixer | ✅ 浏览器前缀 |
| postcss-nesting | ✅ CSS Nesting 降级 |
| postcss-custom-media | ✅ Custom Media |
| postcss-color-function | ✅ 颜色函数降级 |
| cssnano | ✅ 压缩 |
| postcss-modules | ✅ CSS Modules |
常见面试问题
Q1: 为什么 Lightning CSS 比 PostCSS 快 100 倍?
答案:
- Rust vs JS:编译型语言 vs 解释型语言
- 单 pass:解析、转换、压缩在一次遍历中完成(PostCSS 每个插件独立遍历)
- 内存效率:Rust 的零成本抽象,无 GC 开销
- 内置功能:不需要在多个插件间传递 AST