Skip to content

Bun 은 package.json 에서 npm 의 "overrides" 와 Yarn 의 "resolutions" 를 지원합니다. 이는 메타의존성 (의존성의 의존성) 에 대한 버전 범위를 지정하는 메커니즘입니다.

json
{
  "name": "my-app",
  "dependencies": {
    "foo": "^2.0.0"
  },
  "overrides": { 
    "bar": "~4.4.0"
  } 
}

기본적으로 Bun 은 각 패키지의 package.json 에 지정된 범위에 따라 모든 의존성과 메타의존성의 최신 버전을 설치합니다. 예를 들어 프로젝트에 하나의 의존성인 foo 가 있고 이는 다시 bar 에 의존한다고 가정합니다. 이는 bar 가 우리 프로젝트의 메타의존성 임을 의미합니다.

json
{
  "name": "my-app",
  "dependencies": {
    "foo": "^2.0.0"
  }
}

bun install 을 실행하면 Bun 은 각 패키지의 최신 버전을 설치합니다.

txt
node_modules
├── foo@1.2.3
└── bar@4.5.6

하지만 bar@4.5.6 에 보안 취약점이 도입되었다면 어떻게 될까요? 취약점이 없는 이전 버전으로 bar 를 고정할 방법이 필요할 수 있습니다. 이때 "overrides"/"resolutions" 가 사용됩니다.


"overrides"

package.json"overrides" 필드에 bar 를 추가합니다. Bun 은 bar 가 의존성이든 메타의존성이든 설치할 bar 의 버전을 결정할 때 지정된 버전 범위를 따릅니다.

NOTE

Bun 은 현재 최상위 `"overrides"` 만 지원합니다. [중첩 overrides](https://docs.npmjs.com/cli/v9/configuring-npm/package-json#overrides) 는 지원되지 않습니다.
json
{
  "name": "my-app",
  "dependencies": {
    "foo": "^2.0.0"
  },
  "overrides": { 
    "bar": "~4.4.0"
  } 
}

"resolutions"

"resolutions" 도 유사한 구문을 사용하며 이는 "overrides" 에 대한 Yarn 의 대안입니다. Bun 은 Yarn 에서의 마이그레이션을 쉽게 하기 위해 이 기능을 지원합니다.

"overrides" 와 마찬가지로 중첩 resolutions 은 현재 지원되지 않습니다.

json
{
  "name": "my-app",
  "dependencies": {
    "foo": "^2.0.0"
  },
  "resolutions": { 
    "bar": "~4.4.0"
  } 
}

Bun by www.bunjs.com.cn 편집