npm:依赖关系如何pipe理?

我安装了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)。

因此,我的问题:如何用npmpipe理依赖关系? 无论他们喜欢什么版本,每个软件包都可以简单安装吗?

我猜这个问题是:这种重复“正常”,还是“按devise”可以这么说呢?

芝加哥商业交易所。

简短的回答是,这是通过devise。 当您require node_modules目录中的模块时,它将使用顶层目录 – 例如,您在package.json指定的目录。

其他软件包有自己的package.json文件,可以自由使用他们想要的任何版本,当他们require在自己的代码中,他们将使用自己的node_modules文件夹。

理想情况下,您使用的模块有testing等,以确保它们指定的依赖关系的版本(甚至指定一系列版本,例如0.9.x )运行良好,并且在其中查看旧版本的子依赖关系必然意味着危险,尽pipe这些模块的新版本当然可以修复错误等等。 你可能需要在GitHub上find你关心的模块,下载版本库,自己更新package.json和依赖关系,运行testing来看看新版本是否工作。 如果是这样,也许作者愿意接受你的更新请求 。