Nub: Rust 기반의 Node.js 올인원 툴킷
Nub: Rust 기반의 Node.js 올인원 툴킷
Nub은 기존 Node.js 런타임을 대체하는 대신 이를 확장하는 Rust 기반의 빠르고 올인원인 툴킷입니다. Bun이나 Deno와 유사한 개발자 경험(DX)을 제공하는 것을 목표로 하며, 내장된 TypeScript 지원, 고성능 패키지 매니저, 통합 버전 관리 기능을 제공하는 동시에 기존 Node.js 생태계와 완벽하게 호환되며 특정 벤더의 API 종속(lock-in)을 피합니다.
고성능 툴링 및 벤치마크
Nub은 Node.js 프로세스를 생성할 때 발생하는 시작 지연을 제거하기 위해 여러 일반적인 JavaScript 기반 도구들을 Rust 바이너리로 대체합니다. 이는 개발 라이프사이클 전반에 걸쳐 상당한 성능 향상을 가져옵니다.
스크립트 및 패키지 실행
Nub의 스크립트 러너(nub run)와 패키지 러너(nubx)는 npm run, pnpm run, npx, pnpm dlx를 즉시 대체할 수 있도록 설계되었습니다.
- 스크립트 디스패치:
nub run은pnpm run보다 약 24배,npm run보다 약 22배 빠르며, npm의 329.9ms 및 pnpm의 442.7ms와 비교했을 때 14.7ms의 웜 디스패치(warm dispatch) 시간을 기록합니다. - 패키지 실행:
nubx는 이중 Node.js 생성 페널티를 제거함으로써 로컬 바이너리를npx보다 약 19배 빠르게 실행합니다.
패키지 관리
Aube 엔진을 기반으로 하는 nub install은 pnpm과 호환되는 플래그를 가진 대체 도구입니다. 222개의 의존성을 가진 프로젝트의 웜 프로즌 설치(warm frozen install) 벤치마크에서 Nub은 다른 매니저들을 압도했습니다:
| Tool | Time | Relative Performance |
|---|---|---|
| Nub | 1122 ms | — |
| Bun | 1444 ms | 29% slower |
| pnpm | 2847 ms | 2.5× slower |
| npm | 4163 ms | 3.7× slower |
TypeScript-First Node.js 런타임
Nub은 개발자가 별도의 빌드 단계 없이 .ts, .tsx, .js, .jsx 파일을 직접 실행할 수 있게 해줍니다. tsx보다 시작 속도가 2.9배 빠릅니다.
기술적 구현
Nub은 현대적인 Node.js 확장 인터페이스를 활용하여 기능을 확장합니다:
- 트랜스파일링: 사전 트랜스파일링을 위해
oxc라이브러리를 내장합니다. - 훅(Hooks): 커스텀 트랜스파일링 및 리졸루션을 위해
module.registerHooks()와--import/--require프리로드를 사용합니다. - 네이티브 애드온: N-API 네이티브 애드온을 활용하여 Rust 기반 로직을 Node.js 프로세스에 통합합니다.
언어 및 API 지원
Nub은 현대적인 JavaScript 및 TypeScript 기능을 포괄적으로 지원합니다:
- TypeScript 지원:
enum,namespace, 확장자 없는 임포트, 그리고tsconfig.json#paths리졸루션을 완벽하게 지원합니다. - 현대적 API: Nub은 오래된 Node 버전에서
Temporal,URLPattern,RegExp.escape와 같은 API를 폴리필(polyfill)하며,node:sqlite,vm.Module,WebSocket과 같은 실험적 Node.js 기능을 플래그 없이 사용할 수 있게 합니다. - 환경 관리: Next.js 및 Vite와 동일한 수준의 자동
.env*로딩 기능을 내장하고 있습니다.
통합 Node.js 생태계 관리
Nub은 파편화된 여러 도구들을 하나의 바이너리로 통합하여 프로젝트 의존성뿐만 아니라 Node.js 런타임 자체를 관리합니다.
Node 버전 관리
Nub은 nvm 또는 fnm과 유사한 버전 관리자 역할을 합니다. nub node install을 통해 수동으로 버전을 프로비저닝하거나, .node-version, .nvmrc, package.json#engines, 또는 package.json#devEngines에서 필요한 Node 버전을 자동으로 감지하여 즉시 설치할 수 있습니다.
패키지 매니저 호환성
Nub은 락파일(lockfiles) 또는 package.json 설정을 기반으로 기존 패키지 매니저(npm, pnpm, Bun, 또는 Yarn)를 감지하는 "compat-mode"로 작동할 수 있습니다. 이 모드에서 Nub은 기존 도구의 특정 설정 파일(예: pnpm-lock.yaml 또는 bunfig.toml)과 환경 변수를 준수합니다.
패키지 메타 관리
nub pm shim을 통해 Nub은 Corepack의 기능을 Rust 네이티브 방식으로 구현하여, npm, yarn, and pnpm을 위한 글로벌 심(shim)을 등록함으로써 특정 프로젝트에 맞는 올바른 패키지 매니저 버전을 사용하도록 보장합니다.