Skip to content

import Run from "/snippets/cli/run.mdx";

Bun 런타임은 빠르게 시작하고 빠르게 실행하도록 설계되었습니다.

내부적으로 Bun 은 Safari 를 위해 Apple 이 개발하는 JavaScriptCore 엔진 을 사용합니다. 대부분의 경우 시작 및 실행 성능은 Node.js 와 Chromium 기반 브라우저에서 사용하는 엔진인 V8 보다 빠릅니다. Bun 의 트랜스파일러와 런타임은 현대적인 고성능 언어인 Zig 로 작성되었습니다. Linux 에서는 Node.js 보다 4 배 빠른 시작 시간을 제공합니다.

명령어시간
bun hello.js5.2ms
node hello.js25.1ms

이 벤치마크는 Linux 에서 간단한 Hello World 스크립트를 실행하는 것을 기반으로 합니다.

파일 실행

소스 파일을 실행하려면 bun run 을 사용하세요.

bash
bun run index.js

Bun 은 TypeScript 와 JSX 를 기본적으로 지원합니다. 모든 파일은 Bun 의 빠른 네이티브 트랜스파일러에 의해 실행 전에 즉시 트랜스파일됩니다.

bash
bun run index.js
bun run index.jsx
bun run index.ts
bun run index.tsx

또는 run 키워드를 생략하고 "네이키드" 명령을 사용할 수 있습니다. 이는 동일하게 동작합니다.

bash
bun index.tsx
bun index.js

--watch

파일을 watch 모드로 실행하려면 --watch 플래그를 사용하세요.

bash
bun --watch run index.tsx

::: note bun run 을 사용할 때는 bun 바로 다음에 --watch 와 같은 Bun 플래그를 배치하세요. :::

bash
bun --watch run dev # ✔️ 이렇게 하세요
bun run dev --watch # ❌ 이렇게 하지 마세요

명령어 끝에 있는 플래그는 무시되어 "dev" 스크립트 자체에 전달됩니다.

package.json 스크립트 실행

::: note npm run <script> 또는 yarn <script> 와 비교 :::

sh
bun [bun 플래그] run <script> [스크립트 플래그]

package.json 은 쉘 명령어에 해당하는 여러 개의 이름있는 "scripts" 를 정의할 수 있습니다.

json
{
  // ... 기타 필드
  "scripts": {
    "clean": "rm -rf dist && echo '완료.'",
    "dev": "bun server.ts"
  }
}

이러한 스크립트를 실행하려면 bun run <script> 를 사용하세요.

bash
bun run clean
rm -rf dist && echo '완료.'
txt
정리 중...
완료.

Bun 은 스크립트 명령어를 서브쉘에서 실행합니다. Linux 및 macOS 에서는 다음 쉘을 순서대로 확인하여 첫 번째로 찾은 쉘을 사용합니다. bash, sh, zsh. Windows 에서는 bash 유사 구문과 많은 일반 명령어를 지원하기 위해 bun shell 을 사용합니다.

NOTE

⚡️ Linux 에서 `npm run` 의 시작 시간은 대략 170ms 입니다. Bun 은 `6ms` 입니다.

스크립트는 더 짧은 명령어인 bun <script> 로도 실행할 수 있지만, 동일한 이름을 가진 bun 내장 명령어가 있으면 내장 명령어가 우선합니다. 이 경우 패키지 스크립트를 실행하려면 더 명시적인 bun run <script> 명령어를 사용하세요.

bash
bun run dev

사용 가능한 스크립트 목록을 보려면 인수 없이 bun run 을 실행하세요.

bash
bun run
txt
quickstart scripts:

 bun run clean
   rm -rf dist && echo '완료.'

 bun run dev
   bun server.ts

2 개의 스크립트

Bun 은 라이프사이클 훅을 존중합니다. 예를 들어 bun run clean 은 정의된 경우 precleanpostclean 을 실행합니다. pre<script> 가 실패하면 Bun 은 스크립트 자체를 실행하지 않습니다.

--bun

package.json 스크립트가 vitenext 와 같은 로컬에 설치된 CLI 를 참조하는 것이 일반적입니다. 이러한 CLI 는 종종 shebang 으로 표시되어 node 로 실행되어야 함을 나타내는 JavaScript 파일입니다.

js
#!/usr/bin/env node

// 작업 수행

기본적으로 Bun 은 이 shebang 을 존중하고 스크립트를 node 로 실행합니다. 그러나 --bun 플래그로 이 동작을 재정의할 수 있습니다. Node.js 기반 CLI 의 경우 CLI 를 Node.js 대신 Bun 으로 실행합니다.

bash
bun run --bun vite

필터링

여러 패키지를 포함하는 모노레포에서는 --filter 인수를 사용하여 한 번에 여러 패키지의 스크립트를 실행할 수 있습니다.

bun run --filter <name_pattern> <script> 를 사용하여 이름이 <name_pattern> 과 일치하는 모든 패키지에서 <script> 를 실행하세요. 예를 들어 foo, bar, baz 라는 패키지를 포함하는 서브디렉토리가 있는 경우

bash
bun run --filter 'ba*' <script>

를 실행하면 foo 가 아닌 barbaz 에서 <script> 가 실행됩니다.

자세한 내용은 filter 문서 페이지를 참조하세요.

bun run - 로 stdin 에서 코드 파이프하기

bun run - 를 사용하면 JavaScript, TypeScript, TSX 또는 JSX 를 stdin 에서 읽어 임시 파일에 쓰지 않고도 실행할 수 있습니다.

bash
echo "console.log('Hello')" | bun run -
txt
Hello

bun run - 를 사용하여 파일을 Bun 으로 리디렉션할 수도 있습니다. 예를 들어 .js 파일을 .ts 파일인 것처럼 실행하려면:

bash
echo "console.log!('This is TypeScript!' as any)" > secretly-typescript.js
bun run - < secretly-typescript.js
txt
This is TypeScript!

편의상 bun run - 를 사용할 때 모든 코드는 JSX 지원이 포함된 TypeScript 로 처리됩니다.

bun run --console-depth

--console-depth 플래그로 console 출력의 객체 검사 깊이를 제어하세요.

bash
bun --console-depth 5 run index.tsx

이것은 console.log() 출력에 중첩된 객체가 얼마나 깊게 표시되는지 설정합니다. 기본 깊이는 2 입니다. 높은 값은 더 많은 중첩 속성을 보여주지만 복잡한 객체의 경우 상세한 출력을 생성할 수 있습니다.

ts
const nested = { a: { b: { c: { d: "deep" } } } };
console.log(nested);
// --console-depth 2 (기본값): { a: { b: [Object] } }
// --console-depth 4: { a: { b: { c: { d: 'deep' } } } }

bun run --smol

메모리가 제한된 환경에서는 --smol 플래그를 사용하여 성능을 희생하면서 메모리 사용량을 줄일 수 있습니다.

bash
bun --smol run index.tsx

이것은 가비지 컬렉터가 더 자주 실행되도록 하여 실행 속도를 늦출 수 있습니다. 그러나 메모리가 제한된 환경에서 유용할 수 있습니다. Bun 은 --smol 플래그 사용 여부와 관계없이 사용 가능한 메모리 (cgroups 및 기타 메모리 제한 고려) 에 따라 가비지 컬렉터의 힙 크기를 자동으로 조정하므로 이는 힙 크기가 더 천천히 증가하기를 원하는 경우에 주로 유용합니다.

해결 순서

절대 경로와 ./ 또는 .\\ 로 시작하는 경로는 항상 소스 파일로 실행됩니다. bun run 을 사용하지 않는 한 허용된 확장자를 가진 파일을 실행하면 package.json 스크립트보다 파일이 우선합니다.

동일한 이름의 package.json 스크립트와 파일이 있는 경우 bun run 은 package.json 스크립트를 우선시합니다. 전체 해결 순서는 다음과 같습니다.

  1. package.json 스크립트, 예: bun run build
  2. 소스 파일, 예: bun run src/main.js
  3. 프로젝트 패키지의 바이너리, 예: bun add eslint && bun run eslint
  4. (bun run 만) 시스템 명령어, 예: bun run ls

Bun by www.bunjs.com.cn 편집