惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

O
OpenAI News
I
InfoQ
云风的 BLOG
云风的 BLOG
博客园 - 【当耐特】
D
DataBreaches.Net
H
Help Net Security
爱范儿
爱范儿
F
Fortinet All Blogs
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
N
Netflix TechBlog - Medium
WordPress大学
WordPress大学
GbyAI
GbyAI
宝玉的分享
宝玉的分享
Martin Fowler
Martin Fowler
博客园_首页
C
Check Point Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
G
Google Developers Blog
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
M
MIT News - Artificial intelligence
Recent Announcements
Recent Announcements
P
Proofpoint News Feed
L
LangChain Blog
阮一峰的网络日志
阮一峰的网络日志
V
V2EX
MyScale Blog
MyScale Blog
Recorded Future
Recorded Future
B
Blog
J
Java Code Geeks
T
The Blog of Author Tim Ferriss
Jina AI
Jina AI
博客园 - Franky
B
Blog RSS Feed
The GitHub Blog
The GitHub Blog
量子位
博客园 - 叶小钗
Hugging Face - Blog
Hugging Face - Blog
Cyberwarzone
Cyberwarzone
Google Online Security Blog
Google Online Security Blog
SecWiki News
SecWiki News
V
Vulnerabilities – Threatpost
AWS News Blog
AWS News Blog
Cisco Talos Blog
Cisco Talos Blog
G
GRAHAM CLULEY
T
Tor Project blog
腾讯CDC
美团技术团队
Application and Cybersecurity Blog
Application and Cybersecurity Blog
N
News and Events Feed by Topic

BlogFinder

日常漫步 Vol.24 之漫步前山河 - 雅余 周报 #1-聊聊本周的收获 - Edwin's Blog 我的OpenCode必装插件与Skill Write Something 掌中之物未必在掌握之中 · CRIVU PiliNara,一个更顺手的 PiliPlus 分支 「NekoEcho」:做一个必有回响的猫娘主题博客 2026-05 书影音总结 简化博客主题 - 安迪 你要加油呐 我第一次发布 npm 包 拾花小记#45:中考前的二三事 – 小改学习志 黛西花园5月游 #18 枇杷又熟了的五月月报 一些奇奇怪怪的需求?word仿方正书版的几个小操作 - Xiobb's Blog 0419 御温泉之旅 修复了一些bug,网站基本上趋于稳定了 - 新锐博客 又回到四十年前 如何定义成功 迷鹿屋2026已重新上线 科技冰火两重天+一周回顾 ${title} 热度退了,我反而用得更深了-咕咚同学 我到底该不该换个域名? 随身WIFI折腾记 - 安迪 博客撰写体验提升——hexo pro插件 为什么不用相机把屏幕上的接关密码拍下来? 国清寺与天台山 – Ouroboros ★★★★☆《挽救计划》——久违的经济上行感 - Davidの3号基地 删除右键“打开方式”里多余选项 第三周刊_No.53|一切都会被支付两次 安卓APP通话记录与录音上传踩坑记录 - 子舒的博客 天量下跌 inBox 笔记 2.3.8,把工具栏交给了你-咕咚同学 我把小龙虾搬到了微信-咕咚同学 安好 - 响石潭 Compound Engineering Plugin:让每个工程单元都比上一个更容易 MOSS-TTS Family:开源高质量语音与声音生成模型家族深度解析 Crawl4AI:专为 LLM 设计的开源 Web 爬虫与数据抓取工具 Build Your Own X:从零实现你最喜欢的技术——程序员进阶的终极资源清单 Anthropic Skills:用文件夹教 Claude 专业技能的开源框架 1年的去月球(下) - 梅之夏 欢迎回来。 简单讲讲 ASN.1 与 OID DTV - 直播聚合客户端 5.22-5.27 – 不兴江 还没去过鸭川 – 不兴江 张晶晶同学三刷林志颖 关于我 – 不兴江 爱与嫉妒 – 不兴江 港股被持续做空 备案码花了四百块-咕咚同学 一句话生成封面:我给公众号做了4种风格的AI封面生成技能 「官」方認證 再谈费曼学习法 2026-05-28T00:34:11+08:00 2026-05-28T00:28:45+08:00 离谱的英语学习指南:基于AI的英语进阶系统方法论 iii:零集成架构的后端统一运行时 Claude Code Harness:让 Claude Code 工作有迹可循的工程化框架 Heretic:全自动移除大语言模型审查机制的开源工具 MarkItDown:微软开源的万能文档转 Markdown 利器 Harness:让 Claude Code 秒变多智能体协作工厂 这段时间尽折腾AI Agent了,确实极大地提高了效率 近期动态:两个新站点正式上线啦 误判解除!zhouayuan.com 腾讯安全申诉成功 - 周阿源|玩具设计・插画日常・生活随笔 Ralph:让 AI 编码工具自主循环跑完所有 PRD 任务的量产神器 全都违法 – 个人工作记录 关于zhouayuan.com被误判 “含违规信息” 的说明与申诉记录 - 周阿源|玩具设计・插画日常・生活随笔 小米 MiMo v2.5 Pro 白嫖 最大的人间清醒,兜里有钱,但是不花。 夜晚靓歌(12):于文文现场solo - 王志勇的Blog 今日插画:风扬起的倔强 - 周阿源|玩具设计・插画日常・生活随笔 回门习俗 独立网卡 - 忘记了回忆 500亿入股人工智能企业 从命令行到桌面智能体-咕咚同学 第一性原理读书笔记 行者微评论223-加班の守株待兔-博客|政治与时事-风雨行者 ZOZO开源物理接触求解器:GPU加速的可扩展仿真引擎 OpenStock:开源股票市场交易平台技术深度解析 MoneyPrinterTurbo:基于AI的全自动短视频生成工具深度解析 Claude-Mem:为 Claude Code 构建的持久化记忆压缩系统 Twenty:可代码化定制的企业级开源 CRM 平台技术深度解析 2026-05-26T22:59:17+08:00 企业级开源大模型部署平台 GPUStack 实战教程 1年的去月球(上) - 梅之夏 Sevalla - 静态网站托管服务 不用翻墙、不用注册、不用月费,普通人也能用上 Claude Code 装修灯具要注意⚠️ 黄梅天先锋 - 游子微博 公安备案顺利办结,站点备案全部完成 - 周阿源|玩具设计・插画日常・生活随笔 第三次兑换天猫超市卡了宗宗酱-三维狐少儿编程 Don't think, feel. - Rolen's Blog 人这一辈子,到底图个什么 博客迁移 - Edwin's Blog 情感赛道写作模板 再现本轮行情的典型特征 裁员与平常心-咕咚同学 别让“偷懒”,成为隐私泄露的破绽
SWC:用 Rust 重写的超快 JavaScript/TypeScript 编译器
Cheman · 2026-06-14 · via BlogFinder

今天在 GitHub Trending 上看到一个有意思的项目:SWC,一个用 Rust 编写的超快 JavaScript/TypeScript 编译器,目标是让 Web 开发更快——而且是真正意义上的"快"。

一、项目概述

SWC(Speedy Web Compiler)是一个基于 Rust 的高性能 JavaScript/TypeScript 编译器,同时提供 Rust 和 JavaScript 两种语言绑定。它能够完成代码转译(transpilation)、类型剥离(type stripping)、代码压缩(minification)等核心编译任务,性能相比 Babel 提升 20 倍以上。

核心特性:

  • 极致性能:Rust 原生实现 + 多线程并行,转译速度远超 Babel
  • Babel 兼容:支持从 Babel 迁移,覆盖主流 plugin 生态
  • 双语言绑定:Rust 端通过 swc crate 使用,JavaScript 端通过 @swc/core 使用
  • 生态集成:Next.js 13+ 默认使用 SWC,Turbopack 也基于 SWC 构建
  • 插件系统:支持 WASM 插件,可扩展自定义转换逻辑

二、技术原理

架构设计

SWC 采用经典的编译器多阶段管线架构:

Source Code → Parser → AST → Transforms → Code Generator → Output

核心模块包括:

  • Parserswc_ecma_parser):将 JavaScript/TypeScript 源码解析为 AST,基于手写递归下降解析器
  • AST 定义swc_ecma_ast):ECMAScript AST 节点类型,使用 #[ast_node] 宏自动派生序列化
  • Transformsswc_ecma_transforms_*):一系列 pass 对 AST 进行转换,包括 ES2015+ 降级、TypeScript 剥离、压缩优化等
  • Code Generatorswc_ecma_codegen):将转换后的 AST 重新生成目标代码 + Source Map

多线程并行

Cargo.toml 依赖可以看到 rayondashmappar-core/par-iter 等,SWC 大量使用并行处理:

// par-core 提供并行迭代抽象
use par_core::Parallel;

// 多文件并行转译
inputs.into_par_iter().map(|input| {
    let fm = cm.new_source_file();
    let module = parser.parse()?;
    transforms.apply(&mut module);
    emitter.emit(&module)
}).collect();

性能优化策略

Cargo.toml 的 profile 配置可以看出 SWC 对性能的极致追求:

[profile.release]
lto = "fat"           # 全链接时优化
strip = "symbols"     # 去除调试符号
codegen-units = 1     # 单编译单元,牺牲编译速度换运行性能
panic = "abort"       # 去除 unwinding 代码,减小二进制体积

# 关键 crate 逐个调优 opt-level
[profile.release.package.swc_ecma_parser]
opt-level = 3         # 解析器最高优化
[profile.release.package.swc_ecma_minifier]
opt-level = 3         # 压缩器最高优化

Node.js 绑定

SWC 通过 napi-rsnapi/napi-derive)实现 Node.js 原生绑定,@swc/core 的核心逻辑全部在 Rust 侧完成,JavaScript 侧仅做薄封装:

// package.json 标识 pnpm workspace 管理
{
  "name": "@swc/workspace",
  "packageManager": "[email protected]",
  "workspaces": ["./packages/*", "./bindings/*"]
}

插件架构

SWC 插件基于 WASM 运行时(wasmer/wasmtime),用户可用 Rust 编写插件编译为 WASM,在安全沙箱中运行:

# Cargo.toml 中的 WASM 运行时依赖
wasmer = { version = "6.1.0-rc.3", default-features = false }
wasmtime = { version = "38", default-features = false }

三、安装与快速开始

环境要求

  • Node.js >= 20(开发)/ Node.js >= 10(使用)
  • Rust MSRV 1.73(Rust 端开发)

安装

# JavaScript 端(最常用)
npm install --save-dev @swc/core @swc/cli

# Rust 端
cargo add swc

最简示例

// swc.config.js
module.exports = {
  jsc: {
    parser: {
      syntax: "typescript",
      tsx: true,
    },
    transform: {
      react: {
        runtime: "automatic",
      },
    },
    target: "es2015",
  },
};
# 命令行转译
npx swc src/ --out-dir dist/

Rust 端使用

use swc::Compiler;
use swc_common::sync::Lrc;
use swc_common::SourceMap;

let cm: Lrc<SourceMap> = Default::default();
let compiler = Compiler::new(cm);

let output = compiler.process_js_file( fm, &options)?;
println!("{}", output.code);

四、使用方法与实战

替代 Babel

SWC 提供了完整的 Babel 迁移指南,大部分 Babel 配置可直接映射:

{
  "presets": ["@babel/preset-env", "@babel/preset-typescript"]
}

等价于 SWC 配置:

{
  "jsc": {
    "parser": { "syntax": "typescript" },
    "target": "es2015",
    "experimental": { "plugins": [] }
  },
  "env": {
    "targets": { "chrome": "80" }
  }
}

代码压缩

const swc = require("@swc/core");

const result = await swc.minify(code, {
  compress: true,
  mangle: true,
  format: { comments: false },
});

与 Webpack 集成

npm install --save-dev swc-loader
// webpack.config.js
module.exports = {
  module: {
    rules: [
      {
        test: /\.[jt]sx?$/,
        use: "swc-loader",
      },
    ],
  },
};

Next.js 中自动启用

Next.js 13+ 默认使用 SWC,无需额外配置:

npx create-next-app@latest
# 自动使用 SWC 编译 TypeScript 和 JSX

五、常见问题与解决方案

安装 @swc/core 失败

问题npm install @swc/core 报平台二进制下载失败。

解决

# 清除缓存重试
npm cache clean --force
# 或指定平台
npm install @swc/core --platform=darwin-arm64
# 网络问题可设置镜像
npm config set swc_binary_site https://npmmirror.com/mirrors/swc

与 Babel 插件不兼容

问题:某些 Babel 插件在 SWC 中找不到对应实现。

解决:SWC 支持 WASM 插件扩展,可编写自定义插件。社区也在持续补充插件覆盖度,查看 swc.rs/docs/migrating-from-babel 中的兼容性表。

压缩结果与 Terser 不一致

问题:SWC minify 输出与 Terser 有细微差异。

解决:SWC 的压缩器仍在快速迭代,对于生产环境可先用 compress: true, mangle: false 验证功能正确性,再逐步开启 mangle。

Rust MSRV 问题

问题:编译 SWC Rust crate 时 Rust 版本不满足。

解决

rustup update stable
# SWC MSRV 为 1.73,确保 Rust >= 1.73

六、总结

SWC 用 Rust 重新定义了前端编译的性能上限。通过 LTO、并行解析、WASM 插件沙箱等工程手段,它在保持与 Babel 高度兼容的同时,将编译速度提升了一个数量级。无论你是想加速现有项目的构建,还是探索 Rust + WebAssembly 的技术前沿,SWC 都值得深入体验。

项目地址:https://github.com/swc-project/swc