节点包pipe理器(NPM)似乎产生重复的包

我一直在安装几个节点包,我注意到NPM创build了一堆重复项。

例如,我首先安装了mongoose,自然就安装了一堆依赖关系。 然后,我安装了mongodb软件包,它也带有bson作为依赖项。 由于重叠的依赖关系,我有以下exception:

Mongodb存在于以下目录中:

/usr/local/lib/node_modules/mongodb/ /usr/local/lib/node_modules/mongoose/node_modules/mongodb/ 

另外,bson,mongodb的依赖关系也存在于这两个方面:

 /usr/local/lib/node_modules/mongodb/ /usr/local/lib/node_modules/mongoose/node_modules/mongodb/ 

我意识到这些只是千字节的文件,但我觉得这可能会创造大量的冗余,我可能会得到一个非常复杂的树,类似于以下内容:

 /usr/local/lib/node_modules/[something1]/node_modules/[something2]/node_modules/[something3/.../.../node_modules/[somethingX]/ 

在这种情况下,给定的[dependency]可能在/ usr / local / lib / node_modules下的X级别上。

我主要关心的是更新这些模块。 我不觉得很难想象同时安装不同版本的并发模块。

将所有东西直接放在/ usr / local / lib / node_modules /中,然后交叉引用依赖关系是不是更容易?

问题是,只有mongoose编码与mongodb的v1版本一起工作,并且您已经编写了您的应用程序与mongodb的v2一起工作 – 因此,它安装并加载了两个版本,因此它们都可以工作。 我们可以在节点中轻松完成这个任务,因为require模块方法不会污染全局名称空间,而不像浏览器 – 由于全局命名空间的污染,这使得pipe理和包含正确的依赖关系成为一场皇家的痛苦。

现在,如果你的package.json和mongoose的package.json允许相同的mongodb版本(你可以指定一个特定的版本或范围),那么做一个rm -Rf node_modules; npm install rm -Rf node_modules; npm install将只安装一个mongodb的副本,而不是两个。 不过如前所述,如果指定了多个版本,则会安装并加载多个版本。