【问题标题】:The Node Package Manager (NPM) seems to yield duplicated packages节点包管理器(NPM)似乎产生重复的包
【发布时间】:2013-04-11 12:12:30
【问题描述】:

我一直在安装一些节点包,我注意到 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/ 中然后交叉引用依赖项不是更容易吗?

【问题讨论】:

    标签: node.js module npm


    【解决方案1】:

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

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

    【讨论】:

    • 在安装了一堆不同的模块并启动了一堆不同的项目之后,这不会创建一个忙碌的层次结构吗?有没有办法使用 NPM 运行递归更新?
    • 如果人们正在编写总有一天会完成的小模块,而不是总是不断更新的大模块,那么只会安装一个模块的副本。所以事实证明这并不是什么大问题,因为大多数节点模块都很小,如果不是,他们会听 substack (James Halliday - substack.net) 一段时间,然后说服采用小哲学也是 :) 不久前,我在这里发布了一些关于这个确切问题的想法:gist.github.com/balupton/5308717 也许它会有所帮助,我也花了很长时间才解决这个问题 :)
    • if [both]... allow the same [] version... will only install one copy 那为什么不这样做呢?我有一个特殊情况,应该只使用一个副本,但正在安装几个副本,这需要很长时间,因为......我不知道为什么,但每个实例都需要相当长的时间来安装!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 2020-03-18
    • 2014-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    相关资源
    最近更新 更多