本节咱们来讲 Yarn 中的依赖与版本。软件包依赖关系对于包的胜利是至关重要的,当开发软件包时,咱们可能会用到其余包里的现有代码来开发本人的软件包性能,那么其余包就能够称为我的项目的依赖项。
所有的我的项目依赖都在 package.json 文件中申明,每个依赖项都须要指名依赖名称和最低版本信息。而 yarn.lock 文件里保留了每个依赖的装置版本,来确保软件包在所有装置过程中保持一致。
依赖的类型
不同的依赖有着不同的目标,在构建我的项目时须要一些依赖项,在运行程序时也须要一些依赖项,因为有不同的依赖类型。
对于 package.json 文件能够蕴含的一些依赖类型如下所示:
{
"name": "my_yarn",
"dependencies": {"package-a": "^1.1.0"},
"devDependencies": {"package-b": "^1.2.1"},
"peerDependencies": {"package-c": "^2.5.4"},
"optionalDependencies": {"package-d": "^3.1.0"}
}
- dependencies:惯例依赖,也就是运行代码时所需的依赖项。
- devDependencies:开发依赖,在开发工作流中某些时候须要的依赖关系,而在运行代码时则不须要。
- peerDependencies:伙伴依赖,一种非凡类型的依赖项,只有在公布本人的程序包时才会呈现。
- optionalDependencies:可选依赖,这种依赖即使装置失败,Yarn 也会认为整个依赖装置过程是胜利的。
- bundledDependencies:打包依赖,在公布包时,这个数组里的包都将会被打包(bundle)。
依赖的版本
Yarn 的软件包恪守语义版本控制,也叫作“semver”,也就是说当咱们从资源库装置一个新包,它会和语义版本范畴一起被增加到咱们的 package.json 文件中。
版本号能够划分为 主版本号. 次版本号. 订正号,相似于 1.0.0、1.1.2,不同的状况对应不同的版本号增长,如下所示:
- 主版本号:新的版本不兼容老版本的 API。
- 次版本号:新的版本新增了局部性能并向下兼容。
- 订正号:新的版本修复局部 bug 并向下兼容。
有些时候,除了版本号当前还会呈现一些特殊字符,例如 >=,<,^ 和 ~,这些是运算符,能够用来指定版本范畴。版本范畴的用途是表明依赖的哪个版本会在代码中起作用。举个例子,像 >2.1.0 示意大于 2.1.0 版本、=4.3.1 示意等于 4.3.1 版本。如果不指定运算符,则示意等于某个版本。
选择性依赖项解决
Yarn 反对选择性版本解析,package.json 文件里的 resolutions 字段用于解析选择性版本,能够通过此性能自定义依赖版本。这通常须要在 yarn.lock 文件中进行手动编辑。
示例:
在 package.json 文件中增加一个 resolutions 字段用于笼罩版本定义:
{
"name": "project_name",
"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 命令即可。
留神如果是上面几种状况,会呈现正告:
- 定义了有效的版本解析规定,例如错写了有效的包名。
- 定义的版本解析的版本号、版本范畴有效。
- 定义的版本解析规定的版本号、版本范畴与原始版本范畴不兼容。