
Bun은 JavaScript와 TypeScript를 위한 ‘올인원 툴킷(all-in-one toolkit)’이다. 여기서 올인원 툴킷이라고 소개하는 이유는 런타임 뿐만 아니라 패키지 매니저, 린트, 테스트 등의 기능을 모두 포함하고 있기 때문이다.
특이한 점은 Node.js 생태계에 대응하는 것을 목표로 하고 있다. Node.js보다 4배 빠르다는 것을 우선 장점으로 내걸고 있다.
현재 Bun은 아직 개발 중인 상태이다. 사용이 불가능 한 것은 아니지만 불안정한 부분이 많다.
특징
Zig
Bun은 개발 언어로 Zig 언어를 사용한다. Zig는 C나 Rust와 비슷한 언어인데, 메모리를 다루기 효율적이라고 알려져 있다. 그 외에도 C의 헤더 파일을 사용하거나 바인딩을 만들기도 간편하다고 한다. (의견 출처)
참고로, Bun 개발자인 Jarred Sumner가 X에 밝힌 의견에 따르면 Rust를 사용하여 생산성을 높이는 것이 어렵다고 한다. (트윗)
Node.js 생태계 대응
Bun은 Node 런타임 자체를 대체할 뿐만 아니라, 관련 생태계 도구들도 자체적으로 대응하여 Bun만으로도 관련 기능을 사용할 수 있다.
Node 관련:
- Node.js
npx
-bunx
대응. npx보다 5배 빠르다고 주장.
dotenv
- Bun은.env
파일을 기본적으로 지원하여 불필요.
- nodemon - 자체적으로 watch 모드를 지원.
ws
- 자체 WebSocket 서버 지원.
- node-fetch, isomorphic-fetch - 자체 fetch 기본 지원. (다만 Node.js 18부터는 자체적으로 fetch API를 지원하긴 한다.)
트랜스파일러 (Transpilers):
tsc
- Bun에서.ts
지원. 다만 타입 체킹을 위해선 사용 필요.
babel
- Bun은 다양한 파일을 실행할 수 있기 때문에 대체 가능. (다만 미지원하는 형식의 경우 필요)
ts-node
tsx
번들러:
- esbuild
- webpack
- parcel
- rollup
패키지 매니저:
- npm - Bun에서 호환되는 패키지 매니저 제공.
- yarn
- pnpm
- lerna
테스트 라이브러리:
- jest - Bun에서 Jest와 호환되는 테스트 실행 가능.
- ts-jest
- vitest
다만 기존에 사용하던 생태계와 파일에 완벽히 호환되는 것은 아니다. Bun에 맞춰 대응해주어야 하는 부분이 여전히 많고, 새로 시작하는 프로젝트가 아니라 기존에 사용하던 프로젝트라면 Bun에 대응하는 작업이 상당히 번거로울 것이다.
Bun 공식 문서에서 Node.js API 호환 현황을 확인할 수 있다.
여담
- v1.1부터 Windows 10 이상을 정식 지원한다. v1.0 까지만 해도 WSL을 통해 Bun 실행하는 것을 권장했었다. (참고)