실제로 Bun을 쓰면 세 가지 개념을 반복해서 만나게 돼. 미리 이해해 두면 예상 밖의 동작을 줄일 수 있어.
TypeScript 직접 실행. Bun은 .ts와 .tsx 파일을 곧바로 실행해. 먼저 tsc로 컴파일하거나 시작 단계에서 tsconfig.json을 준비할 필요가 없어. 내부적으로는 실행 시점에 타입 표기를 지우고 JavaScript를 실행해. 빠른 대신 타입 검사는 하지 않아. 타입 오류는 잡지 못하므로 CI에서 bunx tsc --noEmit을 별도로 실행해야 해.
Binary lockfile(bun.lock). 예전 Bun은 완전한 binary 파일인 bun.lockb를 썼고, 현재는 텍스트 기반이면서도 빠른 해석을 위해 Structure-of-Arrays로 최적화된 bun.lock을 사용해. 두 형식 모두 JSON 기반 lockfile보다 빠르게 읽도록 설계됐으며 항상 버전 관리에 포함해야 해.
npm 호환 대체재. Bun은 같은 package.json을 읽고 같은 npm registry와 통신하며 같은 node_modules를 채워. 호환성을 위해 Node.js 패키지에는 자신을 Node.js v24.3.0처럼 보이게 하므로 대부분의 패키지가 그대로 작동해. 예외는 V8 내부에 의존하는 일부 C++ native addon, 드문 Node 전용 API, Node 버전을 지나치게 엄격하게 검사하는 패키지야.