📌 项目地址swc-project/swc | ⭐ 33,592 颗星 | 🔧 Rust | 📜 未标注

SWC 是什么?凭什么说自己是“Speedy”?

SWC(Speedy Web Compiler)是一个完全用 Rust 编写的 TypeScript / JavaScript 编译器。它对外同时提供了 Rust 和 JavaScript 两套接口:Rust 用户可以直接调用各个 crate(入口是 parser),JavaScript 用户则通过 npm 包使用(官方文档在 swc.rs)。

它的核心竞争力只有一个字:。官方基准测试显示,SWC 的转化速度通常是 Babel 的 20 倍以上。这种速度优势主要来自 Rust 语言带来的零成本抽象和并行能力,而不是靠省略功能换取性能。

怎么用?两种方式说明

从 JavaScript 使用

如果你是前端开发者,需要把 SWC 集成到 webpack、rollup 或直接通过命令行使用,直接看官方文档 swc.rs/docs/installation/。具体 API 和 CLI 的用法在那里有完整说明,本文不再赘述(避免编造未提供的信息)。

从 Rust 使用

如果你是 Rust 开发者,想把 SWC 作为库来解析或转换 JavaScript,入口是 rustdoc,典型用法类似:

use swc_ecma_parser::{Parser, StringInput, Syntax, EsVersion};

// 一个极简的解析示例
let input = StringInput::from("const x: number = 1;");
let mut parser = Parser::new(Syntax::Typescript(Default::default()), EsVersion::Es2020, input);
let module = parser.parse_module().unwrap();

注意 SWC 的 MSRV(最低支持的 Rust 版本)当前为 1.73。如果你在 Cargo.toml 中依赖了多个 SWC 的 crate,可以使用官方提供的脚本一次性更新所有依赖到最新版本:

curl https://raw.githubusercontent.com/swc-project/swc/main/scripts/update-all-swc-crates.sh | bash -s

执行这个脚本需要预先安装 jqcargo upgrade 命令。

与 Babel 的关键差异

维度 SWC Babel
语言 Rust JavaScript (大部分插件也是 JS)
速度 基准测试显示 20x+ 较慢,尤其在大型项目
生态 核心功能完整,插件数量在增长 极其成熟,插件上万
目标 同时服务 Rust 和 JS 生态 仅 JavaScript
配置 通过 .swcrcswc.config 通过 babel.config.js / .babelrc

SWC 并非要完全取代 Babel,而是作为更快的替代品存在。如果你需要最广泛的插件生态(比如自定义转译、实验性语法),Babel 仍然是首选。但如果你只是做 TypeScript 转译、代码压缩、或需要极快的构建反馈(CI、热更新),SWC 是更合理的选择。

需要注意的事

  • 开发环境 Node 版本:SWC 项目本身需要 Node v20+ 才能开发;但在使用 SWC 作为工具时,Node v10+ 即可。
  • 许可证:Apache 2.0,可以放心用于商业项目。
  • 社区维护方式:SWC 是社区驱动项目,主力贡献者是志愿者。如果你想获得企业级支持或加速问题修复,可以通过 Open Collective 赞助;也欢迎在 Discord 沟通贡献。
  • 更新注意事项:如果你手动管理 SWC 的多个 Rust crate 依赖,官方推荐使用上面那行 curl 命令来统一更新,避免版本不匹配导致的编译错误。这在 Cargo.toml 中手动改版本号很容易踩坑。

到底适不适合你?

SWC 最适合以下两类人:一是正在为大型项目中 Babel 编译慢而头疼的前端团队,替换后 CI 时间能显著缩短;二是Rust 生态的开发者,需要高性能地解析或转换 JavaScript/TypeScript 代码(例如做代码分析、自动化重构工具)。对普通个人项目,SWC 同样可用,但需要考虑插件缺失带来的成本——先检查你是否依赖了 Babel 特有的插件(如 styled-components 的 babel plugin 等),如果基本只用 TypeScript 或标准语法,直接迁移即可。

这篇文章对你有帮助吗?

发表回复