Yarn resolutions

Yarn 支持在工程的 package.json 文件中的 resolutions 字段里指定包的特定版本或者版本范围。

使用场景

  • 可能工程里的某个依赖的包A不是经常更新,但是这个包所依赖的包B有一个重要更新。这这种情况下,如果这个包A指定的依赖包B的版本范围没有覆盖到包B的最新版本的话,即重新安装依赖时,也不会安装到最新的包B,这时我们可能就要一直等待包A的作者更新了。
  • 当工程里的子依赖有一个重要的安全方面的更新,并且你不想等你直接依赖的包更新时
  • 当工程中某个依赖包正常运行,但是作者不再维护了。如果这个包某个依赖包有更新时,而且我们需要这个更新时。
  • 当工程中某个依赖包定义了一个很大范围的版本时,如果子依赖此时更新了一个最新版本存在bug,我们想退回之前的版本时,

总的来说就是,我们希望指定工程直接依赖里的某个子依赖包的版本时,可以使用 resolutions

如何使用

package.json 文件中添加 resolutions 字段,在该字段下指定我们希望的版本:

package.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"name": "project",
"version": "1.0.0",
"dependencies": {
"left-pad": "1.0.0",
"c": "file:../c-1",
"d2": "file:../d2-1"
},
"resolutions": {
"d2/left-pad": "1.1.1",
"c/**/left-pad": "1.1.2"
}
}

然后执行 yarn install

意思是说可以直接指定依赖 d2 所依赖的 left-pad 版本为 1.1.1。可惜 npm 官方并不支持这个参数,不过 github 上有一个第三方库支持了这个功能。