Yarn(和NPM)允许您指定Git依赖项,如下所示:
yarn add <git remote url>
或
yarn add <git remote url>#<branch/commit/tag>
(取自the docs)
在简单的情况下,这很容易理解,在这种情况下,您有一个Git依赖项并且没有传递依赖项,但并不总是清楚它如何与更复杂的依赖关系图一起工作。
示例1
package.json
...
"dependencies": {
"package-b1": "git@github.com:user/package-b.git"`,
"package-b2": "git@github.com:user/package-b.git"`
}
Yarn会发现package-b1
和package-b2
具有相同的Git网址吗?他们总是会解析为相同的commit-hash吗?
示例2
package.json
...
"dependencies": {
"package-b": "git@github.com:user/package-b.git"`,
"package-c": "git@github.com:user/package-c.git"`
}
github.com/user/package-b/package.json
...
"dependencies": {
"package-c": "git@github.com:user/package-c.git"`
}
Yarn会发现我们的包和package-b
都依赖于相同的Git URL吗?他们会被解析为相同的哈希吗?
示例3
package.json
...
"dependencies": {
"package-b": "git@github.com:user/package-b.git"`,
"package-c1": "git@github.com:user/package-c.git"`
}
github.com/user/package-b/package.json
...
"dependencies": {
"package-c2": "git@github.com:user/package-c.git"`
}
此示例相同,但git@github.com:user/package-c.git
有两个不同的名称。他们被认为是不同的依赖吗?
示例4
package.json
...
"dependencies": {
"package-b": "git@github.com:user/package-b.git"`,
"package-c": "git@github.com:user/package-c.git"`
}
github.com/user/package-b/package.json
...
"dependencies": {
"package-c": "git@github.com:user/package-c-2.git"`
}
此示例也类似,但现在有两个具有相同名称但不同URL的包。纱线会做什么?
摘要
我确定我能想到更多的例子。有人可以说明这些东西是如何工作的吗?
当你意识到每个commit-hash可能有不同的package.json
时,事情变得更加复杂。如果某些包含依赖冲突,Yarn会尝试不同的提交吗?