Node.js npm:依赖关系是如何管理的?

Node.js npm:依赖关系是如何管理的?,node.js,dependencies,npm,Node.js,Dependencies,Npm,我安装了express、mongodb和mongoose。 这是我的npm ls的结果: /home/merc/Bookings ├─┬ connect-mongo@0.1.9 │ └─┬ mongodb@0.9.9-8 │ └── bson@0.0.4 ├─┬ express@3.0.0rc2 │ ├── commander@0.6.1 │ ├─┬ connect@2.4.2 │ │ ├── bytes@0.1.0 │ │ ├── formidable@1.0.11 │ │

我安装了express、mongodb和mongoose。 这是我的
npm ls
的结果:

/home/merc/Bookings
├─┬ connect-mongo@0.1.9 
│ └─┬ mongodb@0.9.9-8 
│   └── bson@0.0.4 
├─┬ express@3.0.0rc2 
│ ├── commander@0.6.1 
│ ├─┬ connect@2.4.2 
│ │ ├── bytes@0.1.0 
│ │ ├── formidable@1.0.11 
│ │ ├── pause@0.0.1 
│ │ └── qs@0.4.2 
│ ├── cookie@0.0.4 
│ ├── crc@0.2.0 
│ ├── debug@0.7.0 
│ ├── fresh@0.1.0 
│ ├── methods@0.0.1 
│ ├── mkdirp@0.3.3 
│ ├── range-parser@0.0.4 
│ └─┬ send@0.0.3 
│   └── mime@1.2.6 
├─┬ jade@0.27.2 
│ ├── commander@0.6.1 
│ └── mkdirp@0.3.0 
├─┬ mongodb@1.1.2 
│ └── bson@0.1.1 
└─┬ mongoose@3.0.0 
  ├── hooks@0.2.1 
  ├─┬ mongodb@1.1.2 
  │ └── bson@0.1.1 
  └── ms@0.1.0 
您可以清楚地看到,出于某种原因,Jade位于根目录上(我假设这是在运行“express”时发生的)。但是,同样,“mongodb”有不同的版本(0.9.9和1.1.2),bson(0.1.1和0.0.4)也有不同的版本

因此,我的问题是:如何使用npm管理依赖关系?每个软件包是否都简单地安装他们喜欢的任何东西,无论他们选择哪个版本

我想问题是:这种复制是“正常的”吗?可以说是“设计的”


Merc.

简短的回答是,是的,这是设计的。当您
需要
节点模块
目录中的模块时,它使用顶级目录——例如,您在
包.json
中指定的目录

其他软件包有自己的
package.json
文件,可以自由使用他们想要的任何版本,并且当他们
需要它们时,他们将使用自己的
节点模块
文件夹


理想情况下,您使用的模块具有测试等,以确保版本(甚至指定一系列版本,例如
0.9.x
)它们指定的依赖项的类型工作得很好,在其中看到旧版本的子依赖项并不一定意味着危险,尽管这些模块的新版本当然可能会修复bug等等。在GitHub上找到您关心的模块、下载存储库、更新
package.json和dependencies,并运行测试以查看新版本是否有效。如果有效,作者可能愿意接受您的更新。

谢谢!简短而甜蜜:D