【问题标题】:NodeJs Package.json Infinite Recursive DependencyNodeJs Package.json 无限递归依赖
【发布时间】:2016-12-14 21:26:45
【问题描述】:

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

假设主应用程序的包 A 列在其 Package.json 的依赖项部分中。反过来,假设这个包 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 会发送这个应用程序进行无限循环安装。

【问题讨论】:

    标签: json node.js package.json


    【解决方案1】:

    OP:Node项目有没有可能遇到递归无限包依赖?

    没有。

    documented algorithm 开始,随着依赖关系树的遍历,“依赖关系将被添加到尽可能靠近顶部的位置。”

    该页面上给出的示例说,如果您有一个包 A 依赖于一个包 B 和一个包 C,并且包 B 还依赖于包 C,则包 B 中的依赖关系将由已安装的副本解决对于包 A。

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

    然而,当您开始遇到依赖于已经满足的不同版本的依赖时,事情会变得有点棘手。事实上,该页面上的next section 专门讨论了这一点:

    npm flat-out 拒绝安装任何 name@version 已经存在于包文件夹祖先树中的任何位置

    他们确实提供了这个递归依赖安装的东西some thought

    【讨论】:

      猜你喜欢
      • 2013-01-06
      • 2012-10-29
      • 2012-05-24
      • 2016-01-05
      • 1970-01-01
      • 2016-11-08
      • 1970-01-01
      • 2017-07-05
      • 2015-03-07
      相关资源
      最近更新 更多