什么是swc?
🧩 一句话总结
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 丰富 |