1

我安装了 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 管理依赖项?是否每个软件包都可以简单地安装他们喜欢的任何版本,无论他们选择哪个版本?

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

默克。

4

1 回答 1

2

简短的回答是,是的,这是设计使然。当您requirenode_modules目录中获取模块时,它使用顶级目录——例如,无论您在package.json.

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

理想情况下,您使用的模块具有测试等,以确保它们指定的依赖项的版本(甚至指定一系列版本,例如0.9.x)运行良好,并且在那里看到旧版本的子依赖项并不一定意味着危险,尽管这些模块的新版本当然可以潜在地修复错误等等。可能值得在 GitHub 上找到您关心的模块,下载存储库,package.json自己更新和依赖项并运行测试以查看新版本是否有效。如果是这样,也许作者愿意接受您的更新的拉取请求。

于 2012-08-10T06:12:08.070 回答