Oxc Transformer Alpha
我们很高兴宣布 Oxc 转换(又名 transpile)的 Alpha 版本发布。
此版本包含三大主要功能:
- 将 TypeScript 转换为 ESNext。
- 将 React JSX 转换为 ESNext,内置 React Refresh 支持。
- TypeScript 隔离声明 DTS 输出,无需使用 TypeScript 编译器。
在当前 Alpha 阶段,我们建议您尝试这些功能,以加速构建速度。
我们的基准测试 显示:
- 转换:Oxc 比 SWC 快 3x 至 5x,内存占用减少 20%,包体积更小(2 MB vs SWC 的 37 MB)。
- 转换:Oxc 比 Babel 快 20x 至 50x,内存占用减少 70%,包体积小 19 MB,仅需安装 2 个 npm 包,而 Babel 需要 170 个。
- React 开发 + React Refresh:Oxc 比 SWC 快 5x,比 Babel 快 50x。
- TS 隔离声明
.d.ts输出:在典型文件上,Oxc 比 TSC 快 40x;在较大文件上快 20x。
使用示例
oxc-transform npm 包
Vue.js 当前正在 实验 在其构建流程中使用 oxc-transform npm 包来处理隔离声明:
import { isolatedDeclaration } from "oxc-transform";
const dts = isolatedDeclaration(filename, ts);@lukeed 与 @maraisr 正在使用 oxc-transform 来处理其项目 empathic 与 dldr,实现将代码转换并生成 .d.ts 文件的 一步完成。
以下示例展示了在一次转换步骤中同时输出 .js 与 .d.ts 文件:
import { transform } from "oxc-transform";
const transformed = transform(filePath, sourceCode, {
typescript: {
onlyRemoveTypeImports: true,
declaration: { stripInternal: true },
},
});
await fs.writeFile("out.js", transformed.code);
await fs.writeFile("out.d.ts", transformed.declaration);unplugin-isolated-decl
vue-macros 使用 unplugin-isolated-decl 作为其 esbuild 插件的集成工具。
@sxzz 报告 其 .d.ts 生成时间从 76 秒缩短至 16 秒。
Airtable 的 Bazel 构建
来自 Airtable 的 @michaelm 已在其 CI 流水线中集成了 Oxc 的隔离声明 .d.ts 输出功能,用于 Bazel 构建。
Rust oxc_transformer crate
Rolldown 打包器直接使用 oxc_transformer Rust crate 进行调用。
基准测试结果
基准测试配置位于 oxc-project/bench-transformer,相关基准测试可在其 GitHub Actions 中查看。
(如发现任何配置错误,欢迎提出修正。)
在 ubuntu-latest 环境下,测量了不同行数代码的表现:
转换
| 行数 | oxc | swc | babel |
|---|---|---|---|
| ~100 | 0.14 ms | 0.7 ms (5x) | 11.5 ms (82x) |
| ~1000 | 0.9 ms | 5.7 ms (6.3x) | 38.7 ms (43x) |
| ~10000 | 14.9 ms | 35.9 ms(2.4x) | 492 ms (33x) |
隔离声明
| 行数 | oxc | tsc |
|---|---|---|
| ~100 | 0.1 ms | 23.1 ms (231x) |
| ~1000 | 3.1 ms | 26.8 ms (8.6x) |
| ~10000 | 3.5 ms | 115.2 ms (33x) |
包大小
Oxc 仅需下载 2 个 npm 包,总计 2 MB。
| 包 | 大小 |
|---|---|
@oxc-transform/binding-darwin-arm64 | 2.0 MB |
@swc/core-darwin-arm64 | 37.5 MB |
@babel/core + @babel/preset-env + @babel/preset-react + @babel/preset-typescript | 21 MB 与 170 个包 |
内存使用量
Oxc 占用更少的内存。
使用 /usr/bin/time -alh node 测量 parser.ts(10777 行)的转换内存使用情况:
| 最大 RSS | |
|---|---|
| oxc | 51 MB |
| swc | 67 MB |
| babel | 172 MB |
下一版本
下一版本将包含目标降级至 ES6 以及 @babel/plugin-transform-modules-commonjs 功能。
致谢
感谢 @Dunqing 与 @overlookmotel 在本次发布中付出的所有辛勤努力。
感谢 snyder.tech、schoolhouse.world、@lukeed 与 @maraisr 对本项目的慷慨 赞助。



