import Run from "/snippets/cli/run.mdx";
Bun 런타임은 빠르게 시작하고 빠르게 실행하도록 설계되었습니다.
내부적으로 Bun 은 Safari 를 위해 Apple 이 개발하는 JavaScriptCore 엔진 을 사용합니다. 대부분의 경우 시작 및 실행 성능은 Node.js 와 Chromium 기반 브라우저에서 사용하는 엔진인 V8 보다 빠릅니다. Bun 의 트랜스파일러와 런타임은 현대적인 고성능 언어인 Zig 로 작성되었습니다. Linux 에서는 Node.js 보다 4 배 빠른 시작 시간을 제공합니다.
| 명령어 | 시간 |
|---|---|
bun hello.js | 5.2ms |
node hello.js | 25.1ms |
이 벤치마크는 Linux 에서 간단한 Hello World 스크립트를 실행하는 것을 기반으로 합니다.
파일 실행
소스 파일을 실행하려면 bun run 을 사용하세요.
bun run index.jsBun 은 TypeScript 와 JSX 를 기본적으로 지원합니다. 모든 파일은 Bun 의 빠른 네이티브 트랜스파일러에 의해 실행 전에 즉시 트랜스파일됩니다.
bun run index.js
bun run index.jsx
bun run index.ts
bun run index.tsx또는 run 키워드를 생략하고 "네이키드" 명령을 사용할 수 있습니다. 이는 동일하게 동작합니다.
bun index.tsx
bun index.js--watch
파일을 watch 모드로 실행하려면 --watch 플래그를 사용하세요.
bun --watch run index.tsx::: note bun run 을 사용할 때는 bun 바로 다음에 --watch 와 같은 Bun 플래그를 배치하세요. :::
bun --watch run dev # ✔️ 이렇게 하세요
bun run dev --watch # ❌ 이렇게 하지 마세요명령어 끝에 있는 플래그는 무시되어 "dev" 스크립트 자체에 전달됩니다.
package.json 스크립트 실행
::: note npm run <script> 또는 yarn <script> 와 비교 :::
bun [bun 플래그] run <script> [스크립트 플래그]package.json 은 쉘 명령어에 해당하는 여러 개의 이름있는 "scripts" 를 정의할 수 있습니다.
{
// ... 기타 필드
"scripts": {
"clean": "rm -rf dist && echo '완료.'",
"dev": "bun server.ts"
}
}이러한 스크립트를 실행하려면 bun run <script> 를 사용하세요.
bun run clean
rm -rf dist && echo '완료.'정리 중...
완료.Bun 은 스크립트 명령어를 서브쉘에서 실행합니다. Linux 및 macOS 에서는 다음 쉘을 순서대로 확인하여 첫 번째로 찾은 쉘을 사용합니다. bash, sh, zsh. Windows 에서는 bash 유사 구문과 많은 일반 명령어를 지원하기 위해 bun shell 을 사용합니다.
NOTE
⚡️ Linux 에서 `npm run` 의 시작 시간은 대략 170ms 입니다. Bun 은 `6ms` 입니다.스크립트는 더 짧은 명령어인 bun <script> 로도 실행할 수 있지만, 동일한 이름을 가진 bun 내장 명령어가 있으면 내장 명령어가 우선합니다. 이 경우 패키지 스크립트를 실행하려면 더 명시적인 bun run <script> 명령어를 사용하세요.
bun run dev사용 가능한 스크립트 목록을 보려면 인수 없이 bun run 을 실행하세요.
bun runquickstart scripts:
bun run clean
rm -rf dist && echo '완료.'
bun run dev
bun server.ts
2 개의 스크립트Bun 은 라이프사이클 훅을 존중합니다. 예를 들어 bun run clean 은 정의된 경우 preclean 과 postclean 을 실행합니다. pre<script> 가 실패하면 Bun 은 스크립트 자체를 실행하지 않습니다.
--bun
package.json 스크립트가 vite 나 next 와 같은 로컬에 설치된 CLI 를 참조하는 것이 일반적입니다. 이러한 CLI 는 종종 shebang 으로 표시되어 node 로 실행되어야 함을 나타내는 JavaScript 파일입니다.
#!/usr/bin/env node
// 작업 수행기본적으로 Bun 은 이 shebang 을 존중하고 스크립트를 node 로 실행합니다. 그러나 --bun 플래그로 이 동작을 재정의할 수 있습니다. Node.js 기반 CLI 의 경우 CLI 를 Node.js 대신 Bun 으로 실행합니다.
bun run --bun vite필터링
여러 패키지를 포함하는 모노레포에서는 --filter 인수를 사용하여 한 번에 여러 패키지의 스크립트를 실행할 수 있습니다.
bun run --filter <name_pattern> <script> 를 사용하여 이름이 <name_pattern> 과 일치하는 모든 패키지에서 <script> 를 실행하세요. 예를 들어 foo, bar, baz 라는 패키지를 포함하는 서브디렉토리가 있는 경우
bun run --filter 'ba*' <script>를 실행하면 foo 가 아닌 bar 와 baz 에서 <script> 가 실행됩니다.
자세한 내용은 filter 문서 페이지를 참조하세요.
bun run - 로 stdin 에서 코드 파이프하기
bun run - 를 사용하면 JavaScript, TypeScript, TSX 또는 JSX 를 stdin 에서 읽어 임시 파일에 쓰지 않고도 실행할 수 있습니다.
echo "console.log('Hello')" | bun run -Hellobun run - 를 사용하여 파일을 Bun 으로 리디렉션할 수도 있습니다. 예를 들어 .js 파일을 .ts 파일인 것처럼 실행하려면:
echo "console.log!('This is TypeScript!' as any)" > secretly-typescript.js
bun run - < secretly-typescript.jsThis is TypeScript!편의상 bun run - 를 사용할 때 모든 코드는 JSX 지원이 포함된 TypeScript 로 처리됩니다.
bun run --console-depth
--console-depth 플래그로 console 출력의 객체 검사 깊이를 제어하세요.
bun --console-depth 5 run index.tsx이것은 console.log() 출력에 중첩된 객체가 얼마나 깊게 표시되는지 설정합니다. 기본 깊이는 2 입니다. 높은 값은 더 많은 중첩 속성을 보여주지만 복잡한 객체의 경우 상세한 출력을 생성할 수 있습니다.
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 플래그를 사용하여 성능을 희생하면서 메모리 사용량을 줄일 수 있습니다.
bun --smol run index.tsx이것은 가비지 컬렉터가 더 자주 실행되도록 하여 실행 속도를 늦출 수 있습니다. 그러나 메모리가 제한된 환경에서 유용할 수 있습니다. Bun 은 --smol 플래그 사용 여부와 관계없이 사용 가능한 메모리 (cgroups 및 기타 메모리 제한 고려) 에 따라 가비지 컬렉터의 힙 크기를 자동으로 조정하므로 이는 힙 크기가 더 천천히 증가하기를 원하는 경우에 주로 유용합니다.
해결 순서
절대 경로와 ./ 또는 .\\ 로 시작하는 경로는 항상 소스 파일로 실행됩니다. bun run 을 사용하지 않는 한 허용된 확장자를 가진 파일을 실행하면 package.json 스크립트보다 파일이 우선합니다.
동일한 이름의 package.json 스크립트와 파일이 있는 경우 bun run 은 package.json 스크립트를 우선시합니다. 전체 해결 순서는 다음과 같습니다.
- package.json 스크립트, 예:
bun run build - 소스 파일, 예:
bun run src/main.js - 프로젝트 패키지의 바이너리, 예:
bun add eslint && bun run eslint - (
bun run만) 시스템 명령어, 예:bun run ls