npm 如何处理循环依赖?

zyp*_*510 8 dependencies npm npm-install

只是想知道,如果有一个具有循环/循环依赖关系的包,npm 会处理吗?如何?我用谷歌搜索但找不到非常有用的结果。


我可以在这里想到两种问题:

  1. 相同版本的循环依赖:A->B, B->C,C->A

    npm 会像这样构建依赖项吗?(只是我的猜测,没有找到任何实际测试的循环依赖)

    A@1.0.0
    ??? B@1.0.0
      ??? C@1.0.0
        ??? A@1.0.0 (deduped)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 不同版本的循环依赖:A@2.0.0->B, B->C, C->A@^1.0.0, 我什至无法猜测如果存在这样的事情会发生什么?

Sys*_*ank 1

我强烈反对有循环包依赖性。不仅仅是 npm 是否可以处理这个问题,还有围绕依赖项可能拥有的所有工具。例如,我遇到了一些由循环包依赖项引起的奇怪的 Typescript 构建错误,npm 似乎没问题。也许它没有注意到单声道存储库中的循环,但 Typescript 失败了,并且没有明确的错误说“由于循环依赖而失败”

根据经验,我会说“循环依赖”往往是一个令人讨厌的问题。这不是非黑即白的情况,它往往就像“未定义的行为”,有时还好,有时不太好。

我无法告诉你 npm 是否明确支持循环依赖,但我可以告诉你更重要的是考虑工具是否可以管理循环 npm 包。总的来说,假设不是更安全