SWC logo

SWC

基于 Rust 构建的超高性能 JavaScript/TypeScript 编译与打包平台,单线程比 Babel 快 20 倍,多线程快 70 倍,是 Next.js、Parcel、Deno 等主流框架的核心编译引擎。

打包工具Rust编译器高性能

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
  • GitHubhttps://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 --watch

JavaScript 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)

关键设计特点

  • 字符串 Interningswc_atoms 模块通过字符串池化(String Interning),将标识符按指针地址比较而非字符串值比较,大幅减少内存分配并提升比较效率
  • 完全模块化 Crate 设计:parser、transformer、resolver、minifier、codegen、bundler 均为独立 Rust crate,可单独引用使用
  • Visitor/Folder 模式swc_ecma_visit 提供类似 Babel traverse 的 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)

核心特性

  1. 极致编译性能:单线程比 Babel 快约 20 倍,多线程(Promise.all)快约 70-253 倍,是已知最快的 JavaScript 编译器之一
  2. 完整的 TypeScript 支持:解析和转换所有 TypeScript 语法,包括类型注解、接口、枚举、泛型、装饰器等(仅类型剥离,不做类型检查)
  3. JSX/TSX 转换:支持经典 JSX 和自动运行时(React 17+)JSX 转换,内置 React Fast Refresh 支持
  4. 内置代码压缩:内置高性能 minifier,可替代 Terser,支持死代码消除、变量名混淆、常量折叠等,速度远超传统工具
  5. Wasm 插件系统:支持通过 Rust 编写 Wasm 插件扩展转换逻辑,插件在沙箱环境中运行,2025 年实现向后兼容
  6. 模块化打包器:内置 swc_bundler 提供模块打包能力,支持 Tree Shaking、Scope Analysis、多入口打包
  7. Source Map 完整支持:支持输入/输出 Source Map,包括合并多个 Source Map
  8. tc39/test262 合规:解析器通过几乎所有 TC39 官方测试套件,确保语法兼容性
  9. 跨平台原生二进制:提供 macOS、Linux、Windows、Android 等全平台预编译 binary,通过 napi-rs 桥接 Rust 与 Node.js
  10. 框架深度集成: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-rsSWC 通过 napi-rs 桥接 Rust 与 Node.js,提供 native binding
Next.jsNext.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 月上线)

适用场景

  1. 大型项目的快速编译:替代 Babel 获得 20-70 倍的编译速度提升,在数万文件的 monorepo 中效果尤为显著
  2. Next.js 项目:Next.js 12+ 默认使用 SWC 编译器,无需额外配置即可获得高性能编译
  3. 开发模式 HMR 加速:在热模块替换和增量编译场景下,SWC 的极速编译显著改善开发体验
  4. 代码压缩替代 Terser:SWC 内置 minifier 在速度和压缩效果上均优于传统 Terser
  5. Rust 工具链集成:需要高性能 JS/TS 解析与转换能力的 Rust 项目(如 LSP、分析工具、代码转换工具)可直接使用 SWC 的独立 crate
  6. Wasm 插件开发:通过 Wasm 插件实现自定义转换逻辑(如 CSS-in-JS、GraphQL、i18n 等)
  7. 测试加速:通过 @swc/jest 替代 ts-jestbabel-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

开发流程最佳实践

  1. 本地开发:使用 swc-loader + webpack/Rspack 获得快速 HMR
  2. 类型检查:独立运行 tsc --noEmit 或使用 IDE 类型检查,不依赖 SWC
  3. CI 构建:利用 SWC 预编译 binary 避免 CI 环境编译 Rust 源码
  4. Monorepo:在 Turborepo/nx 中利用 SWC 缓存进一步加速
  5. 插件开发:使用 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/secBabel ops/sec倍数
4 并行 promises (es2018)4,88427.28~179x
100 并行 promises (es3)2,19932~69x
100 并行 promises (es2018)8,10832~253x

与 esbuild 对比

操作SWCesbuild
1000 份 TS 文件转换~280ms~350ms(含依赖解析)
单文件转译速度极快极快(两者差异可忽略)
完整打包(含 tree shaking)需配合外部打包器内置,<1s 完成传统 30s 的任务

SWC 与 esbuild 在纯转译速度上非常接近,主要差异在于:esbuild 是打包器(含模块解析),SWC 是编译器(需配合 webpack/Rspack 打包)。

性能优化建议

  1. 多线程编译:对多文件项目使用 Promise.all 并行编译可获得最大加速(高达 253 倍于 Babel)
  2. 启用内置 minifier:SWC minifier 比 Terser 快数倍,推荐直接替代
  3. 设置较高的 target:如目标浏览器支持 ES2022,设置 jsc.target: "es2022" 减少不必要的语法转换
  4. 使用平台特定 binary@swc/core 自动下载最优的 native binding,避免从源码编译
  5. 减少 Wasm 插件开销:Wasm 插件存在一定运行时开销,评估是否真正需要
  6. 利用 externalHelpers:设置 externalHelpers: true 减少输出体积
  7. 缓存策略:在 CI 中缓存 .swc 目录和 swc-loader 缓存

安全特性

  • Wasm 插件沙箱隔离:所有 Wasm 插件在隔离的沙箱中运行,无法直接访问宿主环境
  • 内存安全:Rust 的所有权模型和内存安全保证消除了 C/C++ 常见的内存漏洞
  • 依赖审计:项目配置了 cargo deny 进行依赖审计,cspell 进行代码质量检查
  • napi-rs 安全:通过 napi-rs 桥接层确保 Rust 与 Node.js 之间的安全交互
  • 输入验证:解析器通过 tc39/test262 严格测试,减少畸形输入导致的安全风险

技术对比

与同类工具的详细对比

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

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

指标SWCOxc
解析速度约 3 倍更快(Arena 分配)
整体转换成熟稳定仍在追赶 SWC 的功能覆盖
Linter无第一方 LinterOxlint(比 ESLint 快 50 倍)
FormatterOxfmt(内置格式化器)
框架集成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
}

常见陷阱与解决方案

  1. AST 差异:SWC 的 AST 与 Babel AST 存在细微差异(如装饰器节点结构),迁移自定义 Babel 插件时需逐一验证
  2. 插件版本耦合:Wasm 插件与 swc_core 版本关联(2025 年后已实现向后兼容,但仍需注意大版本变更)
  3. Decorator 实现差异:SWC 的 Legacy Decorator 与 Babel 存在细微差异,需配置 legacyDecorator: true
  4. Minifier 边界场景:SWC 内置 minifier 在极端场景下可能不如 Terser 成熟,建议对比输出产物
  5. 不做类型检查:SWC 仅剥离 TypeScript 类型——务必独立运行 tsc --noEmit 进行类型验证
  6. const enumnamespace:SWC 对 TypeScript 的 const enumnamespace 支持有限,迁移时需特别注意
  7. Rspack 插件版本匹配:SWC 插件版本必须与 Rspack 依赖的 swc_core 版本匹配,否则会构建失败

从 Babel 迁移指南

  1. 评估插件兼容性:检查现有 Babel 插件是否都有 SWC 等价方案(查看 SWC Plugin Registry
  2. 替换配置文件:用 .swcrc 替代 babel.config.json,对应配置映射关系参考迁移文档
  3. 替换 loader:将 babel-loader 替换为 swc-loader
  4. 独立类型检查:添加 tsc --noEmit 步骤到 CI 流程中
  5. 验证关键场景:逐一验证 React Fast Refresh、CSS-in-JS(emotion/styled-components)、装饰器等场景
  6. 渐进式迁移:大型项目可先在新模块中启用 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 路线图

优先级方向说明
P0AST 与 Babel/typescript-eslint 对齐减少破坏性变更,降低迁移成本
P1插件生态改进提升 Wasm 插件开发体验、兼容性和文档
P1实验性 Flattened AST探索更高效的内存 AST 布局(swc_experimental_ecma_ast_compat
P2Minifier 持续改进作为 Terser 的更好替代品,优化压缩率和速度
P2React Compiler 支持@swc/react-compiler 持续迭代

学习资源

官方文档

GitHub 资源

社区资源

对比与评测

2026 年现状

最新版本

  • v1.15.43(2026 年 6 月 22 日)—— 持续迭代,聚焦 bug 修复、性能优化和规范合规
  • nightly 构建:提供每夜构建版(如 v1.15.40-nightly-20260523.1),供提前体验最新功能

发展趋势

  1. 从新兴工具到成熟基础设施:SWC 已完成这一关键转变,成为前端编译领域的核心工具之一。2026 年的 SWC 不再是"实验性选择",而是 Next.js、Deno、Parcel 等主流框架的"默认引擎"
  2. Wasm 插件向后兼容(2025 年 11 月实现):解决了插件生态最大的痛点——此前每次 swc_core 版本更新都需要重新编译所有插件,现在插件的兼容性范围大幅扩展
  3. Oxc 竞争加剧:Oxc 的解析器速度约为 SWC 的 3 倍(得益于 Arena 分配策略),且内置了 Oxlint 和 Oxfmt 等工具。SWC 在转换能力深度和框架集成广度上仍占优势,但竞争压力持续增大
  4. 框架集成持续深化:Next.js 15+、Rspack 1.7+、Deno 2+ 等持续深化 SWC 集成;React Compiler 支持通过 @swc/react-compiler 落地
  5. Rust 前端工具链的基石:越来越多的 Rust 前端工具依赖 SWC 的 AST crate 作为解析和转换基础设施,SWC 的 AST 设计正在成为事实标准
  6. 实验性 Flattened ASTswc_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 Issues364
Open PRs46
Releases809+
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 负责深度编译转换和框架集成。