> ## Documentation Index
> Fetch the complete documentation index at: https://bun.zhcndoc.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 覆盖与解析

> 使用 npm 的 overrides 和 Yarn 的 resolutions 控制元依赖版本

Bun 支持在 `package.json` 中使用 npm 的 `"overrides"` 和 Yarn 的 `"resolutions"`。这些机制用于为 *元依赖*（即你依赖的依赖）指定版本范围。

```json package.json icon="file-json" theme={"theme":{"light":"github-light","dark":"dracula"}}
{
  "name": "my-app",
  "dependencies": {
    "foo": "^2.0.0"
  },
  "overrides": { // [!code ++]
    "bar": "~4.4.0" // [!code ++]
  } // [!code ++]
}
```

默认情况下，Bun 会根据每个包的 `package.json` 中指定的版本范围安装所有依赖和元依赖的最新版本。假设你有一个项目，它有一个依赖 `foo`，而 `foo` 又依赖于 `bar`。这意味着 `bar` 是我们项目的一个 *元依赖*。

```json package.json icon="file-json" theme={"theme":{"light":"github-light","dark":"dracula"}}
{
  "name": "my-app",
  "dependencies": {
    "foo": "^2.0.0"
  }
}
```

当你运行 `bun install` 时，Bun 会安装每个包的最新版本。

```txt tree layout of node_modules icon="list-tree" theme={"theme":{"light":"github-light","dark":"dracula"}}
node_modules
├── foo@1.2.3
└── bar@4.5.6
```

但如果在 `bar@4.5.6` 中引入了安全漏洞怎么办？我们可能想要一种方式，将 `bar` 锁定为没有该漏洞的旧版本。这时就可以用到 `"overrides"`/`"resolutions"`。

***

## `"overrides"`

在 `package.json` 中的 `"overrides"` 字段添加 `bar`。无论它是依赖还是元依赖，Bun 都会依照指定的版本范围决定安装哪个版本的 `bar`。

<Note>
  Bun 目前仅支持顶层的 `"overrides"`。[嵌套覆盖](https://docs.npmjs.com/cli/v9/configuring-npm/package-json#overrides) 暂不支持。
</Note>

```json package.json icon="file-json" theme={"theme":{"light":"github-light","dark":"dracula"}}
{
  "name": "my-app",
  "dependencies": {
    "foo": "^2.0.0"
  },
  "overrides": { // [!code ++]
    "bar": "~4.4.0" // [!code ++]
  } // [!code ++]
}
```

## `"resolutions"`

`"resolutions"` 的语法与 `"overrides"` 类似，这是 Yarn 对 `"overrides"` 的替代方案。Bun 支持此功能以便于从 Yarn 迁移。

同样，*嵌套的 resolutions* 目前不被支持。

```json package.json icon="file-json" theme={"theme":{"light":"github-light","dark":"dracula"}}
{
  "name": "my-app",
  "dependencies": {
    "foo": "^2.0.0"
  },
  "resolutions": { // [!code ++]
    "bar": "~4.4.0" // [!code ++]
  } // [!code ++]
}
```
