Skip to content

Oxc Transformer Alpha


Oxc 변환기(일명 트랜스파일)의 알파 릴리스를 발표하게 되어 매우 기쁩니다.

이 릴리스에는 세 가지 주요 기능이 포함되어 있습니다:

  1. 타입스크립트를 ESNext로 변환합니다.
  2. 내장된 React Refresh와 함께 리액트 JSX를 ESNext로 변환합니다.
  3. 타입스크립트 컴파일러를 사용하지 않고 타입스크립트 고립 선언 DTS 출력을 지원합니다.

이 알파 단계에서는 이러한 기능을 실험하여 빌드 시간을 가속화하는 것을 권장합니다.

우리의 벤치마킹 결과에 따르면:

  • 변환: Oxc는 SWC보다 3배~5배 빠르며, 메모리 사용량은 20% 감소하고 패키지 크기는 더 작습니다 (2 MB 대비 SWC의 37 MB).
  • 변환: Oxc는 Babel보다 20배~50배 빠르며, 메모리 사용량은 70% 감소하고, 설치할 npm 패키지 수가 2개뿐이며, Babel의 170개 대비 19MB 작습니다.
  • 리액트 개발 + 리액트 리프레시: Oxc는 SWC보다 5배 빠르고, Babel보다 50배 빠릅니다.
  • 타입스크립트 고립 선언 .d.ts 출력: 일반 파일에서 TSC보다 40배 빠르고, 큰 파일에서는 20배 빠릅니다.

사용 예제

oxc-transform npm 패키지

현재 뷰.js는 빌드 파이프라인에서 고립 선언을 위해 oxc-transform npm 패키지를 실험 중하고 있습니다:

javascript
import { isolatedDeclaration } from "oxc-transform";
const dts = isolatedDeclaration(filename, ts);

@lukeed@maraisroxc-transform를 사용하여 자신의 패키지 empathicdldr에서 .d.ts한 번의 단계로 변환하고 생성하고 있습니다.

다음 예제는 한 번의 변환 단계에서 .js.d.ts를 모두 생성하는 방법을 보여줍니다:

javascript
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-macrosesbuild 플러그인과의 통합 도구로 unplugin-isolated-decl을 사용하고 있습니다.

@sxzz보고하여 .d.ts 생성 시간이 76초에서 16초로 줄어들었다고 밝혔습니다.

Airtable에서의 바젤 빌드

에어테이블@michaelm바젤 빌드 내에서 자신의 CI 파이프라인에 Oxc의 고립 선언 .d.ts 출력을 통합하고 있습니다.

루스트 oxc_transformer 크레이트

롤돈 번들러는 oxc_transformer 루스트 크레이트를 직접 사용하고 있습니다.

벤치마킹 결과

벤치마킹 설정은 oxc-project/bench-transformer에 있으며, 벤치마크 결과는 그 깃허브 액션에서 확인할 수 있습니다.

(오류 또는 잘못된 구성이 있다면 수정 제안을 환영합니다.)

ubuntu-latest에서 코드 줄 수에 따라 측정된 예시입니다:

변환

줄 수oxcswcbabel
~1000.14 ms0.7 ms (5x)11.5 ms (82x)
~10000.9 ms5.7 ms (6.3x)38.7 ms (43x)
~1000014.9 ms35.9 ms(2.4x)492 ms (33x)

고립 선언

줄 수oxctsc
~1000.1 ms23.1 ms (231x)
~10003.1 ms26.8 ms (8.6x)
~100003.5 ms115.2 ms (33x)

패키지 크기

Oxc는 총 2개의 npm 패키지만 다운로드하면 되며, 전체 크기는 2MB입니다.

패키지크기
@oxc-transform/binding-darwin-arm642.0 MB
@swc/core-darwin-arm6437.5 MB
@babel/core + @babel/preset-env + @babel/preset-react + @babel/preset-typescript21 MB 및 170개 패키지

메모리 사용량

Oxc는 더 적은 메모리를 사용합니다.

parser.ts 변환 시 메모리 사용량 측정 (10777줄) – /usr/bin/time -alh node 사용:

최대 RSS
oxc51 MB
swc67 MB
babel172 MB

다음 릴리스

다음 릴리스에는 ES6 대상 낮추기 및 @babel/plugin-transform-modules-commonjs가 포함될 예정입니다.

감사 인사

이 릴리스에 기여한 모든 노고에 대해 @Dunqing@overlookmotel에게 진심으로 감사드립니다.

감사합니다 snyder.tech, schoolhouse.world, @lukeed@maraisr님께서 제공해주신 정성 어린 후원.