Node.js npm:依赖关系是如何管理的?
我安装了express、mongodb和mongoose。 这是我的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 │ │
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