5

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

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

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]/

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

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

将所有内容直接放入 /usr/local/lib/node_modules/ 然后交叉引用依赖项不是更容易吗?

4

1 回答 1

3

问题是,当 mongoose 仅​​被编码为使用 mongodb v1 时,而您已经将应用程序编码为使用 mongodb 的 v2 - 因此,它安装并加载了两个版本,因此一切正常。我们可以在 node 中轻松做到这一点,因为 require 模块方式不会污染全局命名空间,这与浏览器不同 - 由于全局命名空间污染,这使得管理和包含正确的依赖项变得非常痛苦。

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

于 2013-04-11T12:18:06.423 回答