SWC logo

SWC

基于 Rust 实现的超高性能 JavaScript/TypeScript 编译器,速度比 Babel 快 20-70 倍,是 Next.js 的默认编译器。

精选工具编译转译Rust高性能Next.js

SWC 是使用 Rust 编写的新一代 JavaScript/TypeScript 编译器,单线程比 Babel 快约 20 倍、多线程快约 70 倍。作为 Next.js、Parcel、Deno 的默认编译器,npm 周下载量约 4000 万。

SWC — 高性能 Rust 转译器

基于 Rust 实现的超高性能 JavaScript/TypeScript 编译器,速度比 Babel 快 20-70 倍,是 Next.js 的默认编译器。

技术简介说明

SWC(Speedy Web Compiler)是使用 Rust 语言编写的新一代 JavaScript/TypeScript 编译器。它的目标是在保持与 Babel 功能兼容的前提下,提供数量级的性能提升。SWC 通过 Rust 的零成本抽象、内存安全和优秀的并发模型,实现了单线程下约 20 倍、多线程下约 70 倍于 Babel 的编译速度,同时通过了几乎所有 TC39 官方的 test262 兼容性测试。

SWC 的核心定位是编译转译器——负责将 JavaScript/TypeScript/JSX 等源代码转换为兼容的目标 JavaScript 输出。与 Babel 类似,SWC 不做模块打包,而是专注于文件级别的语法转换和代码压缩。它的架构设计高度模块化,解析器、转换器、压缩器、代码生成器均为独立的 Rust crate,可以被其他工具集成使用。

2026 年,SWC 已从"新兴工具"转型为"成熟基础设施"。它是 Next.js 12+ 的默认编译器,被 Parcel、Deno、Rspack 等主流工具采用,npm 周下载量约 4000 万。SWC 的 Wasm 插件系统在 2025 年实现了向后兼容,解决了每次 swc_core 更新都需要重新编译插件的痛点。面对 OXC 等新竞争者(解析速度快 3 倍),SWC 聚焦编译核心能力的深化和框架集成的巩固。

基本信息

项目详情
官网https://swc.rs
GitHubhttps://github.com/swc-project/swc
LicenseApache-2.0
最新版本v1.15.43(2026 年 6 月 22 日)
主要维护者Donny / 강동윤(DongYoon Kang,@kdy1
核心团队成员OJ Kwon、magic-akari、Austaras、CPunisher
公司支持社区驱动开源项目,OpenCollective 赞助
GitHub Stars~34,100
npm 周下载量~3,950 万
累计 Releases809+

快速上手

安装

# 安装核心编译器
npm install --save-dev @swc/core
 
# 安装 CLI 工具
npm install --save-dev @swc/cli
 
# 或全局安装 CLI
npm install -g @swc/cli @swc/core

基础配置

创建 .swcrc 配置文件:

{
  "jsc": {
    "parser": {
      "syntax": "typescript",
      "tsx": true,
      "decorators": true
    },
    "target": "es2022",
    "loose": false,
    "minify": {
      "compress": false,
      "mangle": false
    }
  },
  "module": {
    "type": "es6"
  },
  "minify": false,
  "isModule": true
}

最小示例

# CLI 编译单个文件
npx swc src/index.tsx -o dist/index.js
 
# 编译整个目录
npx swc src -d dist
 
# 带 source map
npx swc src -d dist --source-maps

通过 JavaScript API 使用:

import { transform } from '@swc/core';
 
const result = await transform(
  'const x: number = 1; console.log(x);',
  {
    jsc: {
      parser: { syntax: 'typescript' },
      target: 'es2022'
    }
  }
);
 
console.log(result.code);
// 输出: const x = 1;
// console.log(x);

核心概念与架构

四层架构

┌──────────────────────────────────────────────────────────┐
│  JavaScript API Layer (@swc/core)                        │  ← JS/TS 调用入口
├──────────────────────────────────────────────────────────┤
│  Native Bindings (napi-rs / Wasm)                        │  ← Rust ↔ JS 桥接
├──────────────────────────────────────────────────────────┤
│  Core Rust Engine                                        │
│  ├── swc_ecma_parser    — 词法分析 + 语法分析             │
│  ├── swc_ecma_ast       — AST 定义                       │
│  ├── swc_ecma_visit     — AST 遍历(Visitor 模式)        │
│  ├── swc_ecma_transforms — 转换器集合                     │
│  ├── swc_ecma_codegen   — 代码生成                        │
│  └── swc_atoms          — 字符串 Intern(池化)           │
├──────────────────────────────────────────────────────────┤
│  Distribution Packages                                   │  ← 平台特定二进制 / Wasm
└──────────────────────────────────────────────────────────┘

处理流程

源代码 (JS/TS/JSX)
       │
       ▼
  swc_ecma_parser(词法分析 + 语法分析)
       │
       ▼
  swc_ecma_ast(内存 AST + swc_atoms 字符串池化)
       │
       ▼
  swc_ecma_visit + swc_ecma_transforms(Visitor 模式,Fold/Visit traits)
       │
       ▼
  swc_ecma_codegen(代码生成,输出 JS)

关键设计特点

  • 字符串 Interningswc_atoms 模块通过字符串池化,将标识符按指针比较而非值比较,大幅提升比较效率
  • 完全模块化:parser、transformer、resolver、minifier、codegen 均为独立 crate,可单独使用
  • test262 兼容:解析器通过几乎所有 TC39 官方测试套件
  • Wasm 插件:通过 swc_plugin_runner 支持 Wasm 插件扩展转换逻辑

核心特性

  • 极致性能:单线程比 Babel 快约 20 倍,多线程(Promise.all)快约 70-253 倍
  • 完整的 TypeScript 支持:解析和转换所有 TypeScript 语法(类型剥离,不做类型检查)
  • JSX/TSX 支持:支持经典和自动运行时 JSX 转换
  • 代码压缩:内置 minifier,可替代 Terser
  • Source Map:完整的 source map 生成能力
  • Wasm 插件系统:支持通过 Rust 编写 Wasm 插件扩展转换逻辑
  • 框架深度集成:Next.js 默认编译器,Parcel/Deno/Rspack 内置支持
  • tc39/test262 兼容:解析器通过几乎所有 TC39 官方兼容性测试
  • React Fast Refresh:内置支持 React 快速刷新
  • 模块化 crate 设计:每个组件可独立使用(如单独使用解析器)

生态图

SWC 生态系统

┌──────────────────────────────────────────────────────────────┐
│                      SWC 生态系统                             │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  核心包                                                       │
│  ├── @swc/core          — 核心编译器(JS/TS 转换、压缩)       │
│  ├── @swc/cli           — 命令行工具(新版命令 swcx)           │
│  ├── @swc/helpers       — 运行时 helpers(类似 @babel/helpers)│
│  ├── @swc/types         — TypeScript 类型定义                 │
│  └── @swc/wasm          — Wasm 构建(浏览器/非 Node 环境)    │
│                                                              │
│  构建集成                                                     │
│  ├── swc-loader         — Webpack loader                     │
│  ├── @swc/register      — Node.js require hook               │
│  └── @next/swc-*        — Next.js 内置 SWC 平台包            │
│                                                              │
│  独立集成                                                     │
│  ├── @swc-node/core     — Node.js 集成(独立维护)            │
│  ├── @swc-node/register — Node.js require hook(独立维护)    │
│  └── swc_plugin_runner  — Wasm 插件运行时                     │
│                                                              │
│  框架采用                                                     │
│  ├── Next.js            — 默认编译器(替代 Babel)             │
│  ├── Parcel             — 默认转换器                          │
│  ├── Deno               — JS/TS 转换                         │
│  ├── Rspack             — 内置 builtin:swc-loader             │
│  └── NestJS             — 可选加速编译                        │
│                                                              │
│  插件生态                                                     │
│  ├── SWC Plugin Registry — 集中化插件发现平台                  │
│  ├── swc-plugin-*       — 社区 Wasm 插件                     │
│  └── @swc/plugin-*      — 官方插件(emotion、styled-components 等)│
│                                                              │
└──────────────────────────────────────────────────────────────┘

适用场景

  • 大型项目的快速编译:替代 Babel 获得 20-70 倍的编译速度提升
  • Next.js 项目:Next.js 12+ 默认使用 SWC,无需额外配置
  • 开发模式加速:HMR 和增量编译场景下,SWC 的速度优势尤为明显
  • Deno 运行时:Deno 使用 SWC 进行 JS/TS 转译
  • 代码压缩替代 Terser:SWC 内置 minifier 速度更快
  • Rust 工具链集成:需要高性能 JS 解析/转换的 Rust 项目可使用 SWC 的独立 crate
  • Wasm 插件开发:通过 Wasm 插件实现自定义转换逻辑

开发与工程化

Webpack 集成

// webpack.config.js
module.exports = {
  module: {
    rules: [
      {
        test: /\.(ts|tsx|js|jsx)$/,
        use: {
          loader: '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 = {
  swcMinify: true,  // 启用 SWC 压缩(替代 Terser)
  jsc: {
    experimental: {
      plugins: [
        // SWC Wasm 插件
        ['@swc/plugin-emotion', {}]
      ]
    }
  }
};

CI/CD 集成

# 使用 SWC 编译
- name: Build with SWC
  run: npx swc src -d dist --source-maps
 
# 缓存 SWC 依赖
- name: Cache SWC
  uses: actions/cache@v4
  with:
    path: node_modules/.cache/swc-loader
    key: ${{ runner.os }}-swc-${{ hashFiles('.swcrc') }}

性能与安全

性能数据

单线程同步 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/secBabel ops/sec倍数
4 并行 promises (es2018)4,88427.28~179x
100 并行 promises (es3)2,19932~69x
100 并行 promises (es2018)8,10832~253x

性能优化建议

  1. 多线程编译:对于多文件项目,使用 Promise.all 并行编译可获最大加速
  2. 启用 minifier:SWC 内置 minifier 比 Terser 快得多
  3. 平台特定二进制@swc/core 自动选择最优的平台特定 native binding
  4. 减少插件开销:Wasm 插件有一定开销,评估是否真正需要
  5. target 设置:设置较高的 jsc.target(如 es2022)减少不必要的转换

安全注意事项

  • Wasm 插件隔离:Wasm 插件在沙箱中运行,安全性有保障
  • 依赖审计@swc/core 通过 napi-rs 桥接 Rust 和 Node.js,需关注 native binding 的安全更新
  • 输入验证:确保编译输入来源可信

技术对比

与同类工具的详细对比

维度SWCBabelesbuildOXCSucrase
实现语言RustJavaScriptGoRustJavaScript
定位编译器(类 Babel)编译器编译器 + 打包器工具链快速转换器
vs Babel 速度20-253x基准定位不同20x+~20x
TypeScript✅ 剥离类型✅ 剥离类型✅ 剥离类型✅ 剥离类型✅ 剥离类型
类型检查
JSX
打包能力✅(Rolldown)
插件系统Wasm 插件JS 插件(最丰富)JS 插件(有限)发展中不支持
代码压缩✅ 内置❌(需外部)✅ 内置✅ 内置
框架集成Next.js、Parcel、DenoWebpack、Rollup、JestVite、Angular 17+Vite 8、RolldownSandpack、Jest
npm 周下载量~3950 万~6.5 亿~2.37 亿~1000 万~数百万
成熟度成熟(v1.15+)最成熟(10+ 年)成熟(仍 0.x)快速成长维护模式
维护模式核心团队 + 社区赞助3 人志愿者 + 机构赞助单人 BDFLVoidZero/Cloudflare单人维护

与 OXC 的对比(2026 新竞争者)

指标SWCOXC
解析器速度~3x 更快
整体转换成熟稳定仍在追赶
Linter无第一方Oxlint(50x faster than ESLint)
框架集成Next.js 核心Vite/Rolldown 核心
插件生态成熟(Wasm)发展中

何时选择 SWC

  • Next.js 项目(默认集成)
  • 需要替代 Babel 获得显著速度提升
  • 需要 Wasm 插件扩展能力
  • 需要内置代码压缩替代 Terser

何时考虑替代方案

  • 需要丰富的插件生态 → Babel
  • 需要打包能力 → esbuild 或 Rolldown
  • 追求极致解析速度 → OXC

最佳实践

生产环境配置

{
  "jsc": {
    "parser": {
      "syntax": "typescript",
      "tsx": true,
      "dynamicImport": true
    },
    "target": "es2022",
    "loose": false,
    "externalHelpers": true,
    "minify": {
      "compress": {
        "unused": true,
        "dead_code": true
      },
      "mangle": true
    }
  },
  "module": {
    "type": "es6"
  },
  "minify": true
}

常见陷阱

  1. AST 差异:SWC 的 AST 与 Babel AST 存在细微差异,迁移自定义 Babel 插件时需注意
  2. 插件版本耦合:Wasm 插件与 swc_core 版本关联,升级 SWC 可能需要更新插件(2025 年后已改善向后兼容)
  3. Decorator 差异:SWC 的 Decorator 实现与 Babel 存在细微差异
  4. Minifier 成熟度:SWC 内置 minifier 在极端场景下可能不如 Terser 成熟
  5. TypeScript 类型检查:SWC 仅剥离类型,不做类型检查——需独立运行 tsc --noEmit

从 Babel 迁移到 SWC

  1. 评估现有 Babel 插件是否都有 SWC 等价方案
  2. 配置 .swcrc 替代 babel.config.json
  3. 替换 babel-loaderswc-loader
  4. 独立运行 tsc --noEmit 做类型检查
  5. 验证 React Fast Refresh、CSS-in-JS 等场景的兼容性

技术局限与边界

已知限制

  • 不做类型检查:仅剥离 TypeScript 类型,需配合 tsc
  • 插件生态仍在发展中:Wasm 插件数量和成熟度不及 Babel
  • AST 兼容性:与 Babel AST 的差异可能影响工具链迁移
  • TC39 提案跟进速度:略慢于 Babel(Babel 最快支持新提案)
  • 社区规模:相比 Babel 6.5 亿/周的下载量,SWC 4000 万/周仍有差距

不适用场景

  • 深度依赖特定 Babel 插件的项目(需确认 SWC 有等价方案)
  • 需要最早支持 TC39 Stage 1 提案的项目 → Babel
  • 需要浏览器端编译能力 → Babel standalone

SWC 路线图

优先级方向
P0AST 与 Babel/typescript-eslint 对齐,减少破坏性变更
P1插件生态改进,提升兼容性和开发者体验
P2Minifier 改进,作为 Terser 的更好替代品

学习资源

2026 年现状

最新版本

  • v1.15.43(2026 年 6 月 22 日)—— 持续迭代,聚焦 bug 修复、性能优化和规范合规

发展趋势

  1. 从新兴工具到成熟基础设施:SWC 已完成这一转变,成为前端编译领域的核心工具之一
  2. Wasm 插件向后兼容:2025 年 11 月实现,解决了插件生态最大的痛点
  3. OXC 竞争加剧:OXC 的解析器速度约为 SWC 的 3 倍,但 SWC 在转换和框架集成方面仍占优势
  4. 框架集成深化:Next.js、Parcel、Deno、Rspack 等持续深化 SWC 集成
  5. 资金可持续性:OpenCollective 年度预算约 $21K,主要依赖 Discord、GitHub Sponsors、Cybozu 等赞助

未来路线图

  • AST 对齐:与 Babel/typescript-eslint AST 深度对齐
  • 插件生态完善:提升 Wasm 插件开发体验和兼容性
  • Minifier 改进:持续优化内置压缩器
  • 聚焦核心:不扩展到 linting/formatting,持续深化编译核心能力

社区活跃度

指标数值
GitHub Stars~34,100
Open Issues363
Open PRs47
Releases809
npm 周下载量~3,950 万
赞助余额$19,389(OpenCollective)

总体评价

SWC 是 Rust 在前端工具链领域最成功的应用之一。它通过数量级的性能提升证明了 Rust 在 JavaScript 编译领域的价值,同时通过 Next.js 等框架的深度集成证明了其工程成熟度。面对 OXC 等新兴竞争者,SWC 的优势在于成熟的框架集成、稳定的 Wasm 插件生态和持续的社区投入。其长期定位是在高性能编译转译领域与 Babel 形成互补——当需要极致速度和原生集成时使用 SWC,当需要最丰富的插件生态时使用 Babel。