Oxc Transformer Alpha
我们很高兴为 Oxc transform(又名 transpile)发布一个 Alpha 版本。
此版本包含三大重要功能
- 将 TypeScript 转换为 ESNext。
- 将 React JSX 转换为 ESNext,并内置 React Refresh。
- TypeScript Isolated Declarations DTS 发射,无需使用 TypeScript 编译器。
在 alpha 阶段,我们建议使用这些功能进行实验以加快构建速度。
我们的基准测试表明
- Transform:Oxc 的速度比 SWC 快 3 到 5 倍,使用的内存减少 20%,且包大小更小(2 MB,而 SWC 为 37 MB)。
- Transform:Oxc 的速度比 Babel 快 20 到 50 倍,使用的内存减少 70%,并且小了 19 MB,只需安装 2 个 npm 包,而 Babel 需要 170 个。
- React 开发 + React Refresh:Oxc 的速度比 SWC 快 5 倍,比 Babel 快 50 倍。
- TS isolated declarations
.d.ts
发射:在典型文件上 Oxc 比 TSC 的速度快 40 倍,在较大的文件上快 20 倍。
使用示例
oxc-transform
npm 包
Vue.js 目前在构建管道中试验oxc-transform
npm 包,用于实现 isolated declarations
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 构建
@michaelm 来自 Airtable 正在对其 Bazel 构建的 CI 管道中集成 Oxc 的隔离声明 .d.ts
导出。
Rust oxc_transformer
crate
Rolldown bundler 直接使用 oxc_transformer
Rust crate。
基准测试结果
基准测试设置位于 oxc-project/bench-transformer,而基准测试显示在其 GitHub Actions 中。
(对于不正确的配置欢迎进行更正。)
在 ubuntu-latest
上,测量了不同代码行的示例
Transform
行 | oxc | swc | babel |
---|---|---|---|
~100 | 0.14 毫秒 | 0.7 毫秒(5 倍) | 11.5 毫秒(82 倍) |
~1000 | 0.9 毫秒 | 5.7 毫秒(6.3 倍) | 38.7 毫秒(43 倍) |
~10000 | 14.9 毫秒 | 35.9 毫秒(2.4 倍) | 492 毫秒(33 倍) |
Isolated Declarations
行 | oxc | tsc |
---|---|---|
~100 | 0.1 毫秒 | 23.1 毫秒 (231x) |
~1000 | 3.1 毫秒 | 26.8 毫秒 (8.6x) |
~10000 | 3.5 毫秒 | 115.2 毫秒 (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 使用的内存更少。
内存使用量转换 parser.ts
(10777 行)-使用 /usr/bin/time -alh node
进行测量
最大 RSS | |
---|---|
oxc | 51 MB |
swc | 67 MB |
babel | 172 MB |
下一个版本
我们的下一个版本将包含目标降低到 ES6 和 @babel/plugin-transform-modules-commonjs
。
鸣谢
感谢 @Dunqing 和 @overlookmotel 为此版本所付出的辛勤工作。
感谢 snyder.tech, schoolhouse.world, @lukeed 和 @maraisr 提供的慷慨的 赞助。