什么是swc?

283 阅读2分钟

🧩 一句话总结

SWC = 一个用 Rust 写的、比 Babel 快 10~20 倍的 JS/TS 编译器。


🚀 它的作用

SWC 的核心用途是:

  1. 转译(Transpile)

    • TypeScript现代 JavaScript(ESNext) 转换成浏览器可以执行的旧版 JavaScript(例如 ES5)。
    • 类似于 Babel 的工作,但速度更快。
  2. 压缩(Minify)

    • 类似 Terser,可以压缩、混淆代码,减少 bundle 体积。
  3. 构建(Build / Bundle)

    • 虽然 SWC 不是一个打包器(Bundler),但可以被 Webpack、Vite、Next.js 等工具用作 底层编译引擎

⚙️ 常见的使用场景

场景传统方案SWC替代方案优势
转译 TypeScriptBabel(@babel/preset-typescript)SWC 编译器编译速度提升约10~20倍
压缩打包文件TerserSWC Minifier压缩速度快约10倍
React 项目构建Babel + WebpackSWC + Webpack / Next.js构建和热更新更快
Vite 项目Esbuild(Go 实现)SWC(Rust 实现)性能相近,但更易定制 AST

🧠 SWC 的核心设计思想

SWC 是一个编译器框架,内部分为三个阶段:

  1. Parser(解析器)
    将源码转成抽象语法树(AST)。
    支持 JS、TS、JSX、TSX。

  2. Transformer(转换器)
    对 AST 做各种转换,比如:

    • TypeScript → JavaScript
    • JSX → React.createElement()
    • ESNext → ES5
  3. Code Generator(代码生成器)
    把 AST 再生成可执行的 JavaScript 代码。


🧩 和 Babel 的关系

对比项BabelSWC
实现语言JavaScriptRust
性能慢(单线程)快(多线程)
插件生态非常丰富正在成长中
可扩展性高(可写 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)中:

工具编译时间
Babel45 秒
SWC3 秒

速度提升非常明显 🔥


📚 总结

特性说明
名称SWC(Speedy Web Compiler)
语言Rust
功能JS/TS 转译 + 压缩
替代Babel / Terser
优点超高速、多线程、安全性高
缺点插件生态还不如 Babel 丰富