overrides

中英双语

如果您需要对依赖项的依赖项进行特定更改,例如用已知安全问题替换依赖项的版本,用 fork 替换现有依赖项,或者确保在任何地方都使用相同版本的包,那么你可以添加一个覆盖。

覆盖提供了一种将依赖关系树中的包替换为另一个版本或完全替换为另一个包的方法。这些更改的范围可以根据需要具体或模糊。

为了确保包 foo 始终安装为版本 1.0.0,无论您的依赖项依赖什么版本:

{
  "overrides": {
    "foo": "1.0.0"
  }
}

以上是简写符号,完整的对象形式可用于允许覆盖包本身以及包的子项。这将导致 foo 始终为 1.0.0,同时也使 barfoo 以外的任何深度也成为 1.0.0

{
  "overrides": {
    "foo": {
      ".": "1.0.0",
      "bar": "1.0.0"
    }
  }
}

当它是包 bar 的子(或孙子,或曾孙等)时,仅将 foo 覆盖为 1.0.0

{
  "overrides": {
    "bar": {
      "foo": "1.0.0"
    }
  }
}

键可以嵌套到任意长度。仅当 foobar 的子级且仅当 barbaz 的子级时才覆盖 foo

{
  "overrides": {
    "baz": {
      "bar": {
        "foo": "1.0.0"
      }
    }
  }
}

覆盖的键还可以包括版本或版本范围。将 foo 覆盖为 1.0.0,但仅当它是 bar@2.0.0 的子代时:

{
  "overrides": {
    "bar@2.0.0": {
      "foo": "1.0.0"
    }
  }
}

您不能为您直接依赖的包设置覆盖,除非依赖项和覆盖本身共享完全相同的规范。为了使这个限制更容易处理,覆盖也可以定义为对直接依赖的规范的引用,方法是在你希望版本匹配的包的名称前面加上 `

如果您需要对依赖项的依赖项进行特定更改,例如用已知安全问题替换依赖项的版本,用 fork 替换现有依赖项,或者确保在任何地方都使用相同版本的包,那么你可以添加一个覆盖。

覆盖提供了一种将依赖关系树中的包替换为另一个版本或完全替换为另一个包的方法。这些更改的范围可以根据需要具体或模糊。

为了确保包 foo 始终安装为版本 1.0.0,无论您的依赖项依赖什么版本:

{
  "overrides": {
    "foo": "1.0.0"
  }
}

以上是简写符号,完整的对象形式可用于允许覆盖包本身以及包的子项。这将导致 foo 始终为 1.0.0,同时也使 barfoo 以外的任何深度也成为 1.0.0

{
  "overrides": {
    "foo": {
      ".": "1.0.0",
      "bar": "1.0.0"
    }
  }
}

当它是包 bar 的子(或孙子,或曾孙等)时,仅将 foo 覆盖为 1.0.0

{
  "overrides": {
    "bar": {
      "foo": "1.0.0"
    }
  }
}

键可以嵌套到任意长度。仅当 foobar 的子级且仅当 barbaz 的子级时才覆盖 foo

{
  "overrides": {
    "baz": {
      "bar": {
        "foo": "1.0.0"
      }
    }
  }
}

覆盖的键还可以包括版本或版本范围。将 foo 覆盖为 1.0.0,但仅当它是 bar@2.0.0 的子代时:

{
  "overrides": {
    "bar@2.0.0": {
      "foo": "1.0.0"
    }
  }
}

{
  "dependencies": {
    "foo": "^1.0.0"
  },
  "overrides": {
    // BAD, will throw an EOVERRIDE error
    // "foo": "^2.0.0"
    // GOOD, specs match so override is allowed
    // "foo": "^1.0.0"
    // BEST, the override is defined as a reference to the dependency
    "foo": "$foo",
    // the referenced package does not need to match the overridden one
    "bar": "$foo"
  }
}