NodeJs Package.json无限递归依赖

时间:2016-08-09 00:53:26

标签: json node.js package.json

这是我一直在思考的问题。 Node项目是否可能遇到递归和无限的包依赖?我的意思是以下内容。

假设主应用程序在Package.json的依赖关系部分中列出了包A.反过来,假设此包A依赖于包B.也就是说,node_modules/A/Package.json将在依赖关系部分中包含B.

现在,假设在一个疯狂的事件组合中,包B依赖于另一个包C(C!= A),然而,它具有A作为其依赖性。澄清一下,

node_modules/A/node_modules/B/package.json - contains C as dependency
node_modules/A/node_modules/B/node_modules/C/package.json - contains A as dependency

我的问题是双重的。首先,这种情况在实践中是否可能?其次,如何解决?在我看来,npm install将发送此应用程序以进行无限循环安装。

1 个答案:

答案 0 :(得分:0)

  

OP:Node项目是否可能遇到递归和无限的包依赖?

没有

documented algorithm开始,随着依赖树的行走,"依赖关系将尽可能靠近顶部添加。"

该页面上给出的示例表明,如果您的程序包A依赖于程序包B和程序包C,而程序包B也依赖于程序包C,则程序包B中的依赖项将由已安装的副本解析包A。

因此,在您的示例中,主程序包对A的依赖性将满足程序包C对A的依赖性。无需再次获取它。

但是,当您开始遇到依赖于已经满足的不同版本的依赖项的依赖项时,事情变得有点棘手。事实上,该页面上的next section具体谈到了这一点:

  

npm flat-out拒绝安装已存在于包文件夹祖先树中任何位置的任何名称@版本

他们确实提供了这种递归依赖安装内容some thought