Yarn如何解决Git依赖关系?

时间:2018-03-15 16:54:20

标签: npm yarnpkg

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-b1package-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会尝试不同的提交吗?

0 个答案:

没有答案