Skip to content

bun install 은 Node.js 와 호환되는 npm 클라이언트로 매우 빠른 npm 대체제로 설계되었습니다.

npm install 에서 bun install 로의 마이그레이션 경로를 npm install 대신 bun install 을 실행하는 것만큼 쉽게 만들기 위해 많은 노력을 기울였습니다.

  • Node.js 및 Bun 용 설계: bun install 은 Node.js 와 호환되는 node_modules 폴더를 설치합니다. 코드 변경 없이 Bun 런타임을 사용하지 않고도 Node.js 프로젝트에서 npm install 대신 사용할 수 있습니다.
  • 자동으로 package-lock.json 변환: bun 의 bun.lock lockfile 형식으로 자동 변환하여 기존 해결된 의존성 버전을 수동 작업 없이 보존합니다. 직장에서 아무도 모르게 npm install 대신 bun install 을 비밀리에 사용할 수 있습니다.
  • .npmrc 호환: bun install 은 npm 의 .npmrc 에서 npm 레지스트리 구성을 읽으므로 npm 과 Bun 모두에서 동일한 구성을 사용할 수 있습니다.
  • 하드링크: Windows 와 Linux 에서 bun install 은 디스크 공간과 설치 시간을 절약하기 위해 하드링크를 사용합니다.
bash
# 마이그레이션에는 하나의 명령어만 필요합니다
bun i

# 의존성을 추가하려면:
bun i @types/bun

# devDependencies 를 추가하려면:
bun i -d @types/bun

# 의존성을 제거하려면:
bun rm @types/bun

package.json 스크립트를 더 빠르게 실행

package.json 의 스크립트 node_modules/.bin 의 실행 파일 (npx 와 유사) 그리고 JavaScript/TypeScript 파일 (node 와 유사) 을 모두 하나의 간단한 명령어로 실행합니다.

NPMBun
npm run <script>bun <script>
npm exec <bin>bun <bin>
node <file>bun <file>
npx <package>bunx <package>

bun run <executable> 를 사용하면 로컬에 설치된 실행 파일을 선택합니다

sh
# package.json 스크립트 실행:
bun my-script
bun run my-script

# node_modules/.bin 의 실행 파일 실행:
bun my-executable # tsc, esbuild 등
bun run my-executable

# JavaScript/TypeScript 파일 실행:
bun ./index.ts

Workspaces? 네 지원합니다.

bun install 은 npm 과 유사하게 workspaces 를 지원하며 더 많은 기능을 제공합니다.

package.json 에서 "workspaces" 를 상대 경로의 배열로 설정할 수 있습니다.

json
{
  "name": "my-app",
  "workspaces": ["packages/*", "apps/*"]
}

workspace 이름으로 스크립트 필터링

Bun 에서 --filter 플래그는 glob 패턴을 허용하며 의존성 순서를 존중하면서 패턴과 일치하는 name 을 가진 모든 workspace 패키지에 대해 명령어를 동시에 실행합니다.

sh
bun --filter 'lib-*' my-script
# 대신:
# npm run --workspace lib-foo --workspace lib-bar my-script

의존성 업데이트

의존성을 업데이트하려면 bun update <package> 를 사용할 수 있습니다. 이는 package.json 에 지정된 semver 범위를 만족하는 최신 버전으로 의존성을 업데이트합니다.

sh
# 단일 의존성 업데이트
bun update @types/bun

# 모든 의존성 업데이트
bun update

# semver 무시 최신 버전으로 업데이트
bun update @types/bun --latest

# 의존성을 특정 버전으로 업데이트
bun update @types/bun@1.3.3

# 모든 의존성을 최신 버전으로 업데이트
bun update --latest

오래된 의존성 확인

오래된 의존성을 확인하려면 bun outdated 를 실행합니다. 이는 npm outdated 와 유사하지만 더 간결한 출력을 제공합니다.

sh
bun outdated
txt
┌────────────────────────────────────────┬─────────┬────────┬────────┐
│ Package                                │ Current │ Update │ Latest │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ @types/bun (dev)                       │ 1.1.6   │ 1.1.10 │ 1.1.10 │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ @types/react (dev)                     │ 18.3.3  │ 18.3.8 │ 18.3.8 │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ @typescript-eslint/eslint-plugin (dev) │ 7.16.1  │ 7.18.0 │ 8.6.0  │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ @typescript-eslint/parser (dev)        │ 7.16.1  │ 7.18.0 │ 8.6.0  │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ @vscode/debugadapter (dev)             │ 1.66.0  │ 1.67.0 │ 1.67.0 │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ esbuild (dev)                          │ 0.21.5  │ 0.21.5 │ 0.24.0 │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ eslint (dev)                           │ 9.7.0   │ 9.11.0 │ 9.11.0 │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ mitata (dev)                           │ 0.1.11  │ 0.1.14 │ 1.0.2  │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ prettier-plugin-organize-imports (dev) │ 4.0.0   │ 4.1.0  │ 4.1.0  │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ source-map-js (dev)                    │ 1.2.0   │ 1.2.1  │ 1.2.1  │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ typescript (dev)                       │ 5.5.3   │ 5.6.2  │ 5.6.2  │
└────────────────────────────────────────┴─────────┴────────┴────────┘

설치된 패키지 나열

설치된 패키지를 나열하려면 bun pm ls 를 사용할 수 있습니다. 이는 Bun 의 lockfile 을 신뢰할 수 있는 소스로 사용하여 node_modules 폴더에 설치된 모든 패키지를 나열합니다. -a 플래그를 전달하여 전달 의존성을 포함한 모든 설치된 패키지를 나열할 수 있습니다.

sh
# 최상위 설치된 패키지 나열:
bun pm ls
txt
my-pkg node_modules (781)
├── @types/node@20.16.5
├── @types/react@18.3.8
├── @types/react-dom@18.3.0
├── eslint@8.57.1
├── eslint-config-next@14.2.8
...
sh
# 모든 설치된 패키지 나열:
bun pm ls -a
txt
my-pkg node_modules
├── @alloc/quick-lru@5.2.0
├── @isaacs/cliui@8.0.2
│   └── strip-ansi@7.1.0
│       └── ansi-regex@6.1.0
├── @jridgewell/gen-mapping@0.3.5
├── @jridgewell/resolve-uri@3.1.2
...

패키지 tarball 생성

패키지 tarball 을 생성하려면 bun pm pack 을 사용할 수 있습니다. 이는 현재 디렉터리에 패키지의 tarball 을 생성합니다.

sh
# tarball 생성
bun pm pack
txt
Total files: 46
Shasum: 2ee19b6f0c6b001358449ca0eadead703f326216
Integrity: sha512-ZV0lzWTEkGAMz[...]Gl4f8lA9sl97g==
Unpacked size: 0.41MB
Packed size: 117.50KB

Shebang

패키지가 #!/usr/bin/env node shebang 에서 node 를 참조하는 경우 bun run 은 기본적으로 이를 존중하고 시스템의 node 실행 파일을 사용합니다. bun run--bun 을 전달하여 Bun 의 node 를 사용하도록 강제할 수 있습니다.

bun run--bun 을 전달하면 로컬에 설치된 Bun 실행 파일에 대한 심볼릭 링크를 임시 디렉터리에 "node"라는 이름으로 생성하고 스크립트 실행 동안 PATH 에 추가합니다.

sh
# node 대신 Bun 런타임 강제 사용
bun --bun my-script

# 이것도 작동합니다:
bun run --bun my-script

전역 설치

bun i -g <package> 를 사용하여 패키지를 전역으로 설치할 수 있습니다. 이는 기본적으로 홈 디렉터리 내의 .bun/install/global/node_modules 폴더에 설치합니다.

sh
# 패키지를 전역으로 설치
bun i -g eslint

# `bun run` 접두사 없이 전역 설치된 패키지 실행
eslint --init

Bun by www.bunjs.com.cn 편집