这是我一直在思考的问题。 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
将发送此应用程序以进行无限循环安装。
答案 0 :(得分:0)
OP:Node项目是否可能遇到递归和无限的包依赖?
没有
从documented algorithm开始,随着依赖树的行走,"依赖关系将尽可能靠近顶部添加。"
该页面上给出的示例表明,如果您的程序包A依赖于程序包B和程序包C,而程序包B也依赖于程序包C,则程序包B中的依赖项将由已安装的副本解析包A。
因此,在您的示例中,主程序包对A的依赖性将满足程序包C对A的依赖性。无需再次获取它。
但是,当您开始遇到依赖于已经满足的不同版本的依赖项的依赖项时,事情变得有点棘手。事实上,该页面上的next section具体谈到了这一点:npm flat-out拒绝安装已存在于包文件夹祖先树中任何位置的任何名称@版本
他们确实提供了这种递归依赖安装内容some thought。