我一直在安装一些节点包,我注意到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]/
在这种情况下,给定的[dependency]可能出现在/ usr / local / lib / node_modules下的X级别上。
我主要关心的是更新这些模块。我不觉得很难想象同时安装不同版本的并发模块。
将所有内容直接放在/ usr / local / lib / node_modules /然后交叉引用依赖项会不会更容易?
答案 0 :(得分:3)
问题是当mongoose只被编码为与mongodb的v1一起工作时,你已经编写了你的应用程序以使用mongodb的v2 - 因此,它安装并加载两个版本,所以这一切都有效。我们可以在节点中轻松完成这项工作,因为require模块方式不会污染全局命名空间,这与浏览器不同 - 浏览器管理和包含正确的依赖关系是由于全局命名空间污染造成的巨大痛苦。
现在,如果你的package.json和mongoose的package.json允许相同的mongodb版本(你可以指定一个特定的版本或范围),那么执行rm -Rf node_modules; npm install
只会安装一个mongodb副本,而不是两个。但是如前所述,如果指定了多个版本,则将安装并加载多个版本。