🧩 一句话总结
SWC = 一个用 Rust 写的、比 Babel 快 10~20 倍的 JS/TS 编译器。
🚀 它的作用
SWC 的核心用途是:
-
转译(Transpile)
- 把 TypeScript 或 现代 JavaScript(ESNext) 转换成浏览器可以执行的旧版 JavaScript(例如 ES5)。
- 类似于 Babel 的工作,但速度更快。
-
压缩(Minify)
- 类似 Terser,可以压缩、混淆代码,减少 bundle 体积。
-
构建(Build / Bundle)
- 虽然 SWC 不是一个打包器(Bundler),但可以被 Webpack、Vite、Next.js 等工具用作 底层编译引擎。
⚙️ 常见的使用场景
| 场景 | 传统方案 | SWC替代方案 | 优势 |
|---|---|---|---|
| 转译 TypeScript | Babel(@babel/preset-typescript) | SWC 编译器 | 编译速度提升约10~20倍 |
| 压缩打包文件 | Terser | SWC Minifier | 压缩速度快约10倍 |
| React 项目构建 | Babel + Webpack | SWC + Webpack / Next.js | 构建和热更新更快 |
| Vite 项目 | Esbuild(Go 实现) | SWC(Rust 实现) | 性能相近,但更易定制 AST |
🧠 SWC 的核心设计思想
SWC 是一个编译器框架,内部分为三个阶段:
-
Parser(解析器)
将源码转成抽象语法树(AST)。
支持 JS、TS、JSX、TSX。 -
Transformer(转换器)
对 AST 做各种转换,比如:- TypeScript → JavaScript
- JSX → React.createElement()
- ESNext → ES5
-
Code Generator(代码生成器)
把 AST 再生成可执行的 JavaScript 代码。
🧩 和 Babel 的关系
| 对比项 | Babel | SWC |
|---|---|---|
| 实现语言 | JavaScript | Rust |
| 性能 | 慢(单线程) | 快(多线程) |
| 插件生态 | 非常丰富 | 正在成长中 |
| 可扩展性 | 高(可写 Babel 插件) | 较难(需要写 Rust 插件) |
| 主流框架支持 | 全支持 | Next.js 已全面使用 SWC |
🏗️ 实际应用示例
在 Next.js 中使用 SWC(默认内置):
Next.js 从 v12 起就 默认使用 SWC 替代 Babel 和 Terser。
你不需要额外配置,自动享受性能提升。
手动使用 SWC(例如在 Node 项目中):
npm install @swc/core @swc/cli --save-dev
然后在命令行中:
npx swc src -d dist
这会把 src 目录的 TypeScript/JS 文件编译到 dist。
⚡ 性能示例
在大项目(如 React + TypeScript)中:
| 工具 | 编译时间 |
|---|---|
| Babel | 45 秒 |
| SWC | 3 秒 |
速度提升非常明显 🔥
📚 总结
| 特性 | 说明 |
|---|---|
| 名称 | SWC(Speedy Web Compiler) |
| 语言 | Rust |
| 功能 | JS/TS 转译 + 压缩 |
| 替代 | Babel / Terser |
| 优点 | 超高速、多线程、安全性高 |
| 缺点 | 插件生态还不如 Babel 丰富 |