SWC
基于 Rust 构建的超高性能 JavaScript/TypeScript 编译与打包平台,单线程比 Babel 快 20 倍,多线程快 70 倍,是 Next.js、Parcel、Deno 等主流框架的核心编译引擎。
SWC 是基于 Rust 的新一代 JS/TS 编译与打包平台,兼具编译器和打包器双重角色,单线程比 Babel 快 20 倍,是 Next.js、Parcel、Deno 等框架的核心编译引擎。
SWC
基于 Rust 构建的超高性能 JavaScript/TypeScript 编译与打包平台,单线程比 Babel 快 20 倍,多线程快 70 倍,是 Next.js、Parcel、Deno 等主流框架的核心编译引擎。
技术简介说明
SWC(Speedy Web Compiler)是使用 Rust 语言从零编写的新一代 JavaScript/TypeScript 编译与打包平台。它的核心使命是在保持与 Babel 功能兼容的前提下,通过 Rust 的零成本抽象、内存安全和优秀并发模型,为前端工具链带来数量级的性能提升。SWC 的编译流水线分为三个阶段:解析(Parsing)——将源代码转化为结构化的抽象语法树(AST);转换(Transforming)——对 AST 进行语法降级、类型剥离、JSX 转换等优化处理;生成(Generating)——将优化后的 AST 重新输出为可执行的 JavaScript 代码,并剔除死代码和内联函数。整个过程通过 native binding 直接运行,无需经历 Node.js 的 JavaScript 运行时开销。
SWC 的核心定位兼具编译器和打包器双重角色。在编译层面,它是 Babel 的高性能替代品,支持所有 ECMAScript 特性、Stage 3 提案和 preset-env 兼容转换;在打包层面,它提供了内置的模块打包器(swc_bundler)和代码压缩器(可替代 Terser)。其架构高度模块化——解析器(swc_ecma_parser)、AST 定义(swc_ecma_ast)、转换器(swc_ecma_transforms_*)、代码生成器(swc_ecma_codegen)均为独立的 Rust crate,既可以被终端工具直接使用,也可以作为底层引擎被其他开发者工具集成。
2026 年,SWC 已从"新兴工具"完全转型为"前端基础设施"。它是 Next.js 12+ 的默认编译器,被 Parcel、Deno、Rspack、NestJS、Remix、Vite(通过插件)等广泛采用,npm 核心包 @swc/core 周下载量约 3,950 万次,GitHub Stars 超过 34,100。在 2025 年,SWC 实现了 Wasm 插件的向后兼容,解决了此前每次 swc_core 版本升级都需重新编译插件的痛点。面对 Oxc(Oxidation Compiler)等新竞争者,SWC 凭借成熟的框架集成深度、稳定的插件生态和持续的社区投入,继续巩固其在高性能 JavaScript 编译领域的领导地位。
基本信息
- 官网:https://swc.rs
- GitHub:https://github.com/swc-project/swc
- License:Apache-2.0
- 最新版本:v1.15.43(2026 年 6 月 22 日)
- 主要维护者/公司:Donny / 강동윤(DongYoon Kang,@kdy1)创建并主导维护;核心贡献者包括 OJ Kwon、magic-akari、Austaras、CPunisher;社区驱动开源项目,通过 OpenCollective 接受赞助;JetBrains 提供开源支持
- GitHub Stars:~34,100
- npm 周下载量:~3,950 万(
@swc/core) - 累计 Releases:809+
- 实现语言:Rust(97.2%)+ JavaScript(2.1%)
- MSRV:Rust 1.73
- 支持平台:macOS(Apple Silicon / x64)、Linux(x86_64 / aarch64 / armv7 / Alpine musl)、Android(aarch64)、Windows(x64 / ia32)
快速上手
安装
# pnpm(推荐)
pnpm add -D @swc/cli @swc/core
# npm
npm install -D @swc/cli @swc/core
# yarn
yarn add -D @swc/cli @swc/core
# 全局安装 CLI
npm install -g @swc/cli @swc/core
@swc/core会自动下载对应平台的预编译 native binary,无需手动编译 Rust 源码。
基础配置
创建 .swcrc 配置文件:
{
"jsc": {
"parser": {
"syntax": "typescript",
"tsx": true,
"decorators": true,
"dynamicImport": true
},
"target": "es2022",
"loose": false,
"minify": {
"compress": {
"unused": true,
"dead_code": true
},
"mangle": true
}
},
"module": {
"type": "es6"
},
"minify": true,
"isModule": true,
"sourceMaps": true
}最小示例
CLI 使用:
# 编译单个文件并输出到标准输出
npx swc ./file.tsx
# 编译单个文件并输出到指定路径
npx swc src/index.tsx -o dist/index.js
# 编译整个目录
npx swc src -d dist
# 编译并生成 source map
npx swc src -d dist --source-maps
# 监听文件变化
npx swc src -d dist --watchJavaScript API 使用:
import { transform } from '@swc/core'
const result = await transform(
'const x: number = 1; console.log(x);',
{
jsc: {
parser: { syntax: 'typescript' },
target: 'es2022'
},
minify: true
}
)
console.log(result.code)
// 输出: const x=1;console.log(x);打包使用:
import { bundle } from '@swc/core'
const result = await bundle({
name: 'MyLib',
entry: {
main: './src/main.ts'
},
output: {
path: './dist',
format: 'umd'
},
module: {
type: 'commonjs'
}
})核心概念与架构
四层架构设计
┌──────────────────────────────────────────────────────────┐
│ JavaScript API Layer (@swc/core) │ ← JS/TS 调用入口
├──────────────────────────────────────────────────────────┤
│ Native Bindings (napi-rs / Wasm) │ ← Rust ↔ JS 桥接层
├──────────────────────────────────────────────────────────┤
│ Core Rust Engine │
│ ├── swc_ecma_parser — 词法分析 + 语法分析(ES2019+) │
│ ├── swc_ecma_ast — AST 数据结构定义 │
│ ├── swc_ecma_visit — AST 遍历(Visitor/Folder 模式) │
│ ├── swc_ecma_transforms — 转换器集合(按功能分 crate) │
│ │ ├── _base — 基础转换框架 │
│ │ ├── _compat — 浏览器兼容性转换 │
│ │ ├── _module — 模块系统转换(AMD/CJS/UMD) │
│ │ ├── _optimization — 死代码消除、内联优化 │
│ │ ├── _react — JSX 转换 + Fast Refresh │
│ │ └── _typescript — TypeScript 类型剥离 │
│ ├── swc_ecma_codegen — 代码生成器(Emitter) │
│ ├── swc_ecma_minifier — 代码压缩器(替代 Terser) │
│ ├── swc_bundler — 模块打包器 │
│ ├── swc_common — 公共工具(Source Map、Span 等) │
│ └── swc_atoms — 字符串 Intern(池化) │
├──────────────────────────────────────────────────────────┤
│ Distribution Packages │ ← 平台特定 binary / Wasm
└──────────────────────────────────────────────────────────┘
编译处理流程
源代码 (JS / TS / JSX / TSX)
│
▼
swc_ecma_parser(词法分析 + 语法分析)
│ — 通过几乎所有 tc39/test262 兼容性测试
▼
swc_ecma_ast(内存 AST + swc_atoms 字符串池化)
│ — 字符串 Interning:按指针比较而非值比较
▼
swc_ecma_visit + swc_ecma_transforms
│ — Visitor/Folder 模式遍历 AST
│ — 多阶段转换管线
▼
swc_ecma_codegen(代码生成,输出 JS + Source Map)
关键设计特点
- 字符串 Interning:
swc_atoms模块通过字符串池化(String Interning),将标识符按指针地址比较而非字符串值比较,大幅减少内存分配并提升比较效率 - 完全模块化 Crate 设计:parser、transformer、resolver、minifier、codegen、bundler 均为独立 Rust crate,可单独引用使用
- Visitor/Folder 模式:
swc_ecma_visit提供类似 Babeltraverse的 AST 遍历能力,支持Visit(只读遍历)和Fold(变换遍历)两种 trait - test262 合规:解析器通过几乎所有 TC39 官方 test262 兼容性测试
- Wasm 插件系统:通过
swc_plugin_runner支持 Wasm 插件扩展转换逻辑,插件在沙箱中运行,安全隔离
打包器架构
SWC 内置的 swc_bundler 提供模块打包能力,工作流程如下:
多入口文件(Entry Points)
│
▼
依赖解析(Module Resolver)
│ — 支持 ESM / CJS / AMD 模块格式
▼
依赖图构建(Dependency Graph)
│
▼
模块转换(Transform)
│ — 各模块独立通过 SWC 编译管线
▼
Scope Analysis + Tree Shaking
│
▼
合并输出(Bundled Output)
│ — 支持 IIFE / UMD / ES Module 格式
▼
可选:Minify(压缩 + Mangle)
核心特性
- 极致编译性能:单线程比 Babel 快约 20 倍,多线程(
Promise.all)快约 70-253 倍,是已知最快的 JavaScript 编译器之一 - 完整的 TypeScript 支持:解析和转换所有 TypeScript 语法,包括类型注解、接口、枚举、泛型、装饰器等(仅类型剥离,不做类型检查)
- JSX/TSX 转换:支持经典 JSX 和自动运行时(React 17+)JSX 转换,内置 React Fast Refresh 支持
- 内置代码压缩:内置高性能 minifier,可替代 Terser,支持死代码消除、变量名混淆、常量折叠等,速度远超传统工具
- Wasm 插件系统:支持通过 Rust 编写 Wasm 插件扩展转换逻辑,插件在沙箱环境中运行,2025 年实现向后兼容
- 模块化打包器:内置
swc_bundler提供模块打包能力,支持 Tree Shaking、Scope Analysis、多入口打包 - Source Map 完整支持:支持输入/输出 Source Map,包括合并多个 Source Map
- tc39/test262 合规:解析器通过几乎所有 TC39 官方测试套件,确保语法兼容性
- 跨平台原生二进制:提供 macOS、Linux、Windows、Android 等全平台预编译 binary,通过 napi-rs 桥接 Rust 与 Node.js
- 框架深度集成:Next.js、Parcel、Deno、Rspack、NestJS 等主流框架将 SWC 作为默认或可选编译引擎
生态图
生态系统全景
┌──────────────────────────────────────────────────────────────────┐
│ SWC 生态系统 │
├──────────────────────────────────────────────────────────────────┤
│ │
│ ━━━ 核心包 ━━━ │
│ ├── @swc/core — 核心编译引擎(转换 + 压缩 + 打包) │
│ ├── @swc/cli — 命令行工具 │
│ ├── @swc/helpers — 运行时 helpers(类 @babel/helpers) │
│ ├── @swc/types — TypeScript 类型定义 │
│ ├── @swc/wasm — Wasm 构建(浏览器/非 Node 环境) │
│ └── @swc/counter — 计数器工具 │
│ │
│ ━━━ 构建集成 ━━━ │
│ ├── swc-loader — Webpack / Rspack loader │
│ ├── @swc/register — Node.js require hook(运行时编译) │
│ ├── @swc/jest — Jest 转换器(加速测试编译) │
│ ├── @swc/html — HTML 解析与处理 │
│ └── @next/swc-* — Next.js 平台特定 SWC 包 │
│ │
│ ━━━ 独立集成 ━━━ │
│ ├── @swc-node/core — Node.js 集成(独立维护,swc-project) │
│ ├── @swc-node/register — Node.js require hook(独立维护) │
│ ├── @swc-node/types — 类型定义 │
│ ├── swc_plugin_runner — Wasm 插件运行时(Rust crate) │
│ └── vite-plugin-swc — Vite 社区插件 │
│ │
│ ━━━ 框架集成 ━━━ │
│ ├── Next.js 12+ — 默认编译器(完全替代 Babel) │
│ ├── Parcel 2+ — 默认转换器 │
│ ├── Deno — 内置 JS/TS 转译引擎 │
│ ├── Rspack — 内置 builtin:swc-loader │
│ ├── NestJS — 可选加速编译(@nestjs/cli 集成) │
│ ├── Remix — 可选编译引擎 │
│ └── Turbopack — 底层编译能力 │
│ │
│ ━━━ 官方插件(@swc/plugin-*)━━━ │
│ ├── @swc/plugin-emotion — Emotion CSS-in-JS │
│ ├── @swc/plugin-styled-components — Styled Components │
│ ├── @swc/plugin-jest — Jest 集成 │
│ ├── @swc/plugin-react-compiler — React Compiler 支持 │
│ └── ... 更多社区插件 │
│ │
│ ━━━ 插件生态 ━━━ │
│ ├── SWC Plugin Registry — 集中化插件发现与管理平台 │
│ ├── swc-plugin-* — 社区 Wasm 插件 │
│ └── plugins.swc.rs — 插件注册表网站 │
│ │
│ ━━━ Rust Crates(独立使用)━━━ │
│ ├── swc_ecma_parser — 高性能 JS/TS 解析器 │
│ ├── swc_ecma_ast — ECMAScript AST 定义 │
│ ├── swc_ecma_visit — Visitor 遍历 trait │
│ ├── swc_ecma_transforms — 转换器集合 │
│ ├── swc_ecma_codegen — 代码生成器 │
│ ├── swc_bundler — 模块打包器 │
│ ├── swc_common — 公共工具 │
│ └── swc_core — 元 crate(插件开发 SDK) │
│ │
└──────────────────────────────────────────────────────────────────┘
关键依赖关系
| 依赖/集成方 | 关系说明 |
|---|---|
| napi-rs | SWC 通过 napi-rs 桥接 Rust 与 Node.js,提供 native binding |
| Next.js | Next.js 12+ 将 SWC 作为默认编译器,Vercel 提供资金支持 |
| Rspack | 内置 builtin:swc-loader,基于 SWC 实现快速编译 |
| swc_core | 插件开发的核心 SDK,决定插件与宿主工具的兼容性 |
| Wasm Runtime | 插件通过 swc_plugin_runner(基于 wasmer)在沙箱中运行 |
社区生态
- Discord:活跃的开发者社区,支持问题讨论和贡献指导
- GitHub Discussions:RFC 讨论、功能提案、技术决策
- OpenCollective:社区赞助平台,年度预算约 $21K
- SWC Plugin Registry:集中化的插件发现和管理平台(2024 年 8 月上线)
适用场景
- 大型项目的快速编译:替代 Babel 获得 20-70 倍的编译速度提升,在数万文件的 monorepo 中效果尤为显著
- Next.js 项目:Next.js 12+ 默认使用 SWC 编译器,无需额外配置即可获得高性能编译
- 开发模式 HMR 加速:在热模块替换和增量编译场景下,SWC 的极速编译显著改善开发体验
- 代码压缩替代 Terser:SWC 内置 minifier 在速度和压缩效果上均优于传统 Terser
- Rust 工具链集成:需要高性能 JS/TS 解析与转换能力的 Rust 项目(如 LSP、分析工具、代码转换工具)可直接使用 SWC 的独立 crate
- Wasm 插件开发:通过 Wasm 插件实现自定义转换逻辑(如 CSS-in-JS、GraphQL、i18n 等)
- 测试加速:通过
@swc/jest替代ts-jest或babel-jest,大幅加速 TypeScript 测试编译
开发与工程化
Webpack 集成
// webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.(ts|tsx|js|jsx)$/,
exclude: /node_modules/,
use: {
loader: 'swc-loader',
options: {
jsc: {
parser: {
syntax: 'typescript',
tsx: true,
decorators: true
},
target: 'es2022'
}
}
}
}
]
}
}Rspack 集成
// rspack.config.js
module.exports = {
module: {
rules: [
{
test: /\.(ts|tsx|js|jsx)$/,
use: {
loader: 'builtin:swc-loader',
options: {
jsc: {
parser: {
syntax: 'typescript',
tsx: true
},
target: 'es2022'
}
}
}
}
]
}
}Next.js 配置
Next.js 12+ 默认使用 SWC,可通过 next.config.js 自定义:
// next.config.js
module.exports = {
// Next.js 15+ 默认启用 SWC 压缩
// Next.js 12-14 需手动开启:
swcMinify: true,
// 实验性 SWC 插件配置
experimental: {
swcPlugins: [
['@swc/plugin-emotion', {}],
['@swc/plugin-styled-components', {}]
]
}
}Jest 集成
// jest.config.js
module.exports = {
transform: {
'^.+\\.(t|j)sx?$': '@swc/jest'
}
}Node.js 运行时编译
// 使用 @swc/register 实现 require 钩子
require('@swc/register')({
jsc: {
parser: { syntax: 'typescript', tsx: true },
target: 'es2022'
}
})
// 之后可以直接 require TypeScript 文件
const app = require('./src/app.ts')CI/CD 集成
# GitHub Actions 示例
name: Build
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
- uses: pnpm/action-setup@v4
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Build with SWC
run: npx swc src -d dist --source-maps
- name: Cache SWC artifacts
uses: actions/cache@v4
with:
path: |
node_modules/.cache/swc-loader
.swc
key: ${{ runner.os }}-swc-${{ hashFiles('.swcrc', '**/pnpm-lock.yaml') }}
- name: Type check
run: npx tsc --noEmit开发流程最佳实践
- 本地开发:使用
swc-loader+ webpack/Rspack 获得快速 HMR - 类型检查:独立运行
tsc --noEmit或使用 IDE 类型检查,不依赖 SWC - CI 构建:利用 SWC 预编译 binary 避免 CI 环境编译 Rust 源码
- Monorepo:在 Turborepo/nx 中利用 SWC 缓存进一步加速
- 插件开发:使用
swc_core作为 SDK,通过 Wasm 发布插件
性能与安全
性能数据
单线程同步 Benchmark
| 配置 | ops/sec | 相对 Babel 倍数 |
|---|---|---|
| babel (es5) | 34.05 | 基准 (1x) |
| swc (es3) | 616 | ~18x |
| swc (es2015) | 677 | ~20x |
| swc (es2018) | 2,555 | ~75x |
多线程异步 Benchmark(Promise.all)
| 场景 | SWC ops/sec | Babel ops/sec | 倍数 |
|---|---|---|---|
| 4 并行 promises (es2018) | 4,884 | 27.28 | ~179x |
| 100 并行 promises (es3) | 2,199 | 32 | ~69x |
| 100 并行 promises (es2018) | 8,108 | 32 | ~253x |
与 esbuild 对比
| 操作 | SWC | esbuild |
|---|---|---|
| 1000 份 TS 文件转换 | ~280ms | ~350ms(含依赖解析) |
| 单文件转译速度 | 极快 | 极快(两者差异可忽略) |
| 完整打包(含 tree shaking) | 需配合外部打包器 | 内置,<1s 完成传统 30s 的任务 |
SWC 与 esbuild 在纯转译速度上非常接近,主要差异在于:esbuild 是打包器(含模块解析),SWC 是编译器(需配合 webpack/Rspack 打包)。
性能优化建议
- 多线程编译:对多文件项目使用
Promise.all并行编译可获得最大加速(高达 253 倍于 Babel) - 启用内置 minifier:SWC minifier 比 Terser 快数倍,推荐直接替代
- 设置较高的 target:如目标浏览器支持 ES2022,设置
jsc.target: "es2022"减少不必要的语法转换 - 使用平台特定 binary:
@swc/core自动下载最优的 native binding,避免从源码编译 - 减少 Wasm 插件开销:Wasm 插件存在一定运行时开销,评估是否真正需要
- 利用 externalHelpers:设置
externalHelpers: true减少输出体积 - 缓存策略:在 CI 中缓存
.swc目录和swc-loader缓存
安全特性
- Wasm 插件沙箱隔离:所有 Wasm 插件在隔离的沙箱中运行,无法直接访问宿主环境
- 内存安全:Rust 的所有权模型和内存安全保证消除了 C/C++ 常见的内存漏洞
- 依赖审计:项目配置了
cargo deny进行依赖审计,cspell进行代码质量检查 - napi-rs 安全:通过 napi-rs 桥接层确保 Rust 与 Node.js 之间的安全交互
- 输入验证:解析器通过 tc39/test262 严格测试,减少畸形输入导致的安全风险
技术对比
与同类工具的详细对比
| 维度 | SWC | Babel | esbuild | Oxc | Terser |
|---|---|---|---|---|---|
| 实现语言 | Rust | JavaScript | Go | Rust | JavaScript |
| 核心定位 | 编译器 + 打包器 | 编译器 | 打包器 + 编译器 | 全栈工具链 | 压缩器 |
| vs Babel 速度 | 20-253x 快 | 基准 | 定位不同 | 解析快 3x | 不适用 |
| TypeScript | ✅ 类型剥离 | ✅ 类型剥离 | ✅ 类型剥离 | ✅ 类型剥离 | ❌ |
| 类型检查 | ❌ | ❌ | ❌ | ❌ | ❌ |
| JSX 支持 | ✅ | ✅ | ✅ | ✅ | ❌ |
| 打包能力 | ✅ swc_bundler | ❌ | ✅ 核心能力 | ✅ Rolldown | ❌ |
| 代码压缩 | ✅ 内置 | ❌ 需外部 | ✅ 内置 | ✅ 内置 | ✅ 核心能力 |
| Tree Shaking | ✅ | ❌ | ✅ | ✅ | ✅(仅压缩) |
| 插件系统 | Wasm 插件 | JS 插件(最丰富) | JS 插件(有限) | 发展中 | JS 插件 |
| 框架集成 | Next.js、Parcel、Deno、Rspack | Webpack、Rollup、Jest | Vite、Angular 17+ | Vite 8、Rolldown | Webpack |
| npm 周下载量 | ~3,950 万 | ~6.5 亿 | ~2.37 亿 | ~1,000 万 | — |
| 成熟度 | 成熟(v1.15+) | 最成熟(10+ 年) | 成熟(仍 0.x) | 快速成长 | 成熟稳定 |
| 维护模式 | 核心团队 + 社区赞助 | 3 人志愿者 + 机构赞助 | 单人 BDFL | VoidZero/Cloudflare | 社区维护 |
与 Oxc 的对比(2026 新竞争者)
| 指标 | SWC | Oxc |
|---|---|---|
| 解析速度 | 快 | 约 3 倍更快(Arena 分配) |
| 整体转换 | 成熟稳定 | 仍在追赶 SWC 的功能覆盖 |
| Linter | 无第一方 Linter | Oxlint(比 ESLint 快 50 倍) |
| Formatter | 无 | Oxfmt(内置格式化器) |
| 框架集成 | Next.js、Parcel、Deno 核心 | Vite/Rolldown 核心 |
| 插件生态 | 成熟(Wasm 插件,向后兼容) | 发展中 |
| AST 策略 | 传统堆分配(Box<>) | Arena 分配(更高效的内存模式) |
| npm 下载量 | ~3,950 万/周 | ~1,000 万/周(分散在多个包) |
| 当选择 | 框架已深度绑定 SWC 时 | 需要极速 Lint/格式化或拥抱 Rolldown 生态时 |
何时选择 SWC
- Next.js 项目(默认集成,零配置)
- 需要替代 Babel 获得显著速度提升且保持功能兼容
- 需要成熟的 Wasm 插件扩展能力
- 需要内置代码压缩替代 Terser
- Rust 项目需要嵌入 JS/TS 解析和转换能力
何时考虑替代方案
- 需要最丰富的插件生态 → Babel(插件数量最多、社区最大)
- 需要零配置的打包能力 → esbuild(开箱即用的打包 + 压缩)
- 追求极致解析和 Lint 速度 → Oxc(解析快 3 倍 + 内置 Linter)
- 需要完整的 Vite 原生体验 → Rolldown(与 Vite 深度集成)
最佳实践
生产环境配置
{
"jsc": {
"parser": {
"syntax": "typescript",
"tsx": true,
"dynamicImport": true,
"decorators": true
},
"target": "es2022",
"loose": false,
"externalHelpers": true,
"transform": {
"legacyDecorator": true,
"decoratorMetadata": true,
"react": {
"runtime": "automatic"
}
},
"minify": {
"compress": {
"unused": true,
"dead_code": true,
"drop_console": false,
"conditionals": true,
"evaluate": true
},
"mangle": true
}
},
"module": {
"type": "es6"
},
"minify": true,
"sourceMaps": true
}常见陷阱与解决方案
- AST 差异:SWC 的 AST 与 Babel AST 存在细微差异(如装饰器节点结构),迁移自定义 Babel 插件时需逐一验证
- 插件版本耦合:Wasm 插件与
swc_core版本关联(2025 年后已实现向后兼容,但仍需注意大版本变更) - Decorator 实现差异:SWC 的 Legacy Decorator 与 Babel 存在细微差异,需配置
legacyDecorator: true - Minifier 边界场景:SWC 内置 minifier 在极端场景下可能不如 Terser 成熟,建议对比输出产物
- 不做类型检查:SWC 仅剥离 TypeScript 类型——务必独立运行
tsc --noEmit进行类型验证 const enum和namespace:SWC 对 TypeScript 的const enum和namespace支持有限,迁移时需特别注意- Rspack 插件版本匹配:SWC 插件版本必须与 Rspack 依赖的
swc_core版本匹配,否则会构建失败
从 Babel 迁移指南
- 评估插件兼容性:检查现有 Babel 插件是否都有 SWC 等价方案(查看 SWC Plugin Registry)
- 替换配置文件:用
.swcrc替代babel.config.json,对应配置映射关系参考迁移文档 - 替换 loader:将
babel-loader替换为swc-loader - 独立类型检查:添加
tsc --noEmit步骤到 CI 流程中 - 验证关键场景:逐一验证 React Fast Refresh、CSS-in-JS(emotion/styled-components)、装饰器等场景
- 渐进式迁移:大型项目可先在新模块中启用 SWC,逐步替换 Babel
技术局限与边界
已知限制
- 不做类型检查:仅剥离 TypeScript 类型注解,不做完整的类型推导和检查——必须配合
tsc或 IDE 类型检查 - Wasm 插件生态仍在发展中:Wasm 插件数量和成熟度不及 Babel 的 JS 插件生态,部分冷门 Babel 插件无 SWC 等价方案
- AST 兼容性差异:与 Babel AST 的细微差异可能导致工具链迁移困难(尤其是自定义 Babel 插件迁移)
- TC39 提案跟进速度:略慢于 Babel(Babel 可以最快支持 Stage 1 提案,SWC 通常支持到 Stage 3+)
- 插件开发门槛高:编写 SWC 插件需要 Rust 编程能力和 Wasm 编译知识,相比 Babel 的 JS 插件门槛更高
- 内置打包器功能有限:
swc_bundler相比 webpack/Rollup/esbuild 的打包能力较弱,复杂项目仍需使用专业打包器 - 社区规模差距:相比 Babel 6.5 亿/周的下载量,SWC 约 4,000 万/周仍有较大差距
不适用场景
- 深度依赖特定 Babel 插件的项目:如自定义 Babel 宏(babel-plugin-macros)、冷门 Stage 1 提案插件等,需先确认 SWC 有等价方案
- 需要最早支持 TC39 Stage 1 提案的项目 → 选择 Babel
- 需要浏览器端编译能力 → 选择 Babel Standalone(SWC 无浏览器端版本,但有
@swc/wasm) - 需要零配置的完整打包方案 → 选择 esbuild 或 Vite
- SolidJS SSR 场景:SWC 对 SolidJS 的 SSR 和 refs 支持不完整
- 需要完整 TypeScript 类型检查 → 必须配合
tsc,不能单独使用 SWC
SWC 路线图
| 优先级 | 方向 | 说明 |
|---|---|---|
| P0 | AST 与 Babel/typescript-eslint 对齐 | 减少破坏性变更,降低迁移成本 |
| P1 | 插件生态改进 | 提升 Wasm 插件开发体验、兼容性和文档 |
| P1 | 实验性 Flattened AST | 探索更高效的内存 AST 布局(swc_experimental_ecma_ast_compat) |
| P2 | Minifier 持续改进 | 作为 Terser 的更好替代品,优化压缩率和速度 |
| P2 | React Compiler 支持 | @swc/react-compiler 持续迭代 |
学习资源
官方文档
- 官方文档:https://swc.rs/docs/getting-started
- SWC 博客:https://blog.swc.rs
- SWC Playground:https://play.swc.rs(在线试用,无需安装)
- 配置参考:https://swc.rs/docs/configuration/compilation
- 从 Babel 迁移:https://swc.rs/docs/migrating-from-babel
- 从 tsc 迁移:https://swc.rs/docs/migrating-from-tsc
- SWC Plugin Registry:https://plugins.swc.rs
- Rust API 文档:https://rustdoc.swc.rs/swc/
GitHub 资源
- GitHub 仓库:https://github.com/swc-project/swc
- GitHub Discussions:https://github.com/swc-project/swc/discussions
- RFC 和投票:https://github.com/swc-project/vote
- CHANGELOG:https://github.com/swc-project/swc/blob/main/CHANGELOG.md
- MAINTENANCE.md:https://github.com/swc-project/swc/blob/main/MAINTENANCE.md
社区资源
- Discord:https://discord.gg/GnHbXTdZz6
- OpenCollective:https://opencollective.com/swc
- 中文深度解析:深入理解 SWC 编译器:核心模块与它们之间的关系(知乎,2024)
- freeCodeCamp 教程:What Is Speedy Web Compiler? SWC Explained With Examples
- Bedrock Streaming 迁移实录:Switching from Babel to SWC(2025)
对比与评测
- esbuild vs SWC 2026 对比:https://www.pkgpulse.com/guides/esbuild-vs-swc-2026
- Oxc vs SWC 2026 对比:https://www.pkgpulse.com/guides/oxc-vs-swc-rust-javascript-toolchain-2026
- SWC 官方 Benchmarks:https://swc.rs/docs/benchmarks
2026 年现状
最新版本
- v1.15.43(2026 年 6 月 22 日)—— 持续迭代,聚焦 bug 修复、性能优化和规范合规
- nightly 构建:提供每夜构建版(如
v1.15.40-nightly-20260523.1),供提前体验最新功能
发展趋势
- 从新兴工具到成熟基础设施:SWC 已完成这一关键转变,成为前端编译领域的核心工具之一。2026 年的 SWC 不再是"实验性选择",而是 Next.js、Deno、Parcel 等主流框架的"默认引擎"
- Wasm 插件向后兼容(2025 年 11 月实现):解决了插件生态最大的痛点——此前每次
swc_core版本更新都需要重新编译所有插件,现在插件的兼容性范围大幅扩展 - Oxc 竞争加剧:Oxc 的解析器速度约为 SWC 的 3 倍(得益于 Arena 分配策略),且内置了 Oxlint 和 Oxfmt 等工具。SWC 在转换能力深度和框架集成广度上仍占优势,但竞争压力持续增大
- 框架集成持续深化:Next.js 15+、Rspack 1.7+、Deno 2+ 等持续深化 SWC 集成;React Compiler 支持通过
@swc/react-compiler落地 - Rust 前端工具链的基石:越来越多的 Rust 前端工具依赖 SWC 的 AST crate 作为解析和转换基础设施,SWC 的 AST 设计正在成为事实标准
- 实验性 Flattened AST:
swc_experimental_ecma_ast_compat探索更高效的内存 AST 布局,未来可能大幅提升性能
未来路线图
- AST 深度对齐:与 Babel 和 typescript-eslint 的 AST 持续对齐,减少生态碎片化
- 插件生态完善:提升 Wasm 插件开发体验(降低 Rust 门槛)、扩大 Plugin Registry 覆盖范围
- Minifier 持续优化:改进压缩率,缩小与 Terser 的差距
- 聚焦编译核心:不扩展到 Linting/Formatting 领域(由 Oxc/Biome 负责),持续深化编译和打包核心能力
- Flattened AST 落地:实验性的扁平化 AST 设计有望在未来版本成为默认
社区活跃度(2026 年 7 月)
| 指标 | 数值 |
|---|---|
| GitHub Stars | ~34,100 |
| Forks | ~1,400 |
| Commits | ~11,972 |
| Open Issues | 364 |
| Open PRs | 46 |
| Releases | 809+ |
| npm 周下载量 | ~3,950 万 |
| 赞助余额 | ~$19,389(OpenCollective) |
总体评价
SWC 是 Rust 在前端工具链领域最成功的应用案例之一。它通过数量级的性能提升证明了 Rust 在 JavaScript 编译领域的巨大价值,同时通过 Next.js、Deno、Parcel 等框架的深度集成证明了其工程成熟度和生产可靠性。2026 年的 SWC 处于"成熟基础设施"阶段——它不再是"是否采用"的问题,而是"如何更好地利用"的问题。面对 Oxc 等新兴竞争者在解析速度上的挑战,SWC 的护城河在于:成熟的框架集成深度、稳定的 Wasm 插件生态(2025 年向后兼容)、广泛的社区采用(近 4,000 万周下载量)以及持续的社区投入。其长期定位是在高性能 JavaScript 编译与打包领域保持核心地位,同时与 Oxc 形成互补——Oxc 负责 Lint/Format/极速解析,SWC 负责深度编译转换和框架集成。