28

我使用 node 编写了一个简单的应用程序。这取决于 express、mongodb 和 mongoose(简单)。因此,我创建了一个名为的文件package.json并将其放入其中:

{
  "name": "booking-dojo",
  "description": "Booking dojo app",
  "version": "0.0.1",
  "private": true,
  "dependencies": {
    "express": "3.x",
    "mongodb": "*",
    "mongoose": "*"
  }
}

然后我跑了npm install,期待 npm 安装这些模块及其依赖项。结果令人失望:

booking-dojo@0.0.1 /home/merc/Synced/Development/Bookings/app/server
├─┬ express@3.0.0rc3 
│ ├── commander@0.6.1 
│ ├─┬ connect@2.4.3 
│ │ ├── 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 
├─┬ mongodb@1.1.4 
│ └── bson@0.1.1 
└─┬ mongoose@3.0.3 
  ├── hooks@0.2.1 
  └── ms@0.1.0 

我对此感到困惑,因为我知道需要 (以及更多)和express需要。 如果我进入并运行,主树的结果会非常不同:jademongoosemongodb
node_modules/jadenpm install

booking-dojo@0.0.1 /home/merc/Synced/Development/Bookings/app/server
├─┬ express@3.0.0rc3 
│ ├── commander@0.6.1 
│ ├─┬ connect@2.4.3 
│ │ ├── bytes@0.1.0 
│ │ ├── formidable@1.0.11 
│ │ ├── pause@0.0.1 
│ │ └── qs@0.4.2 
│ ├─┬ connect-redis@1.4.1 
│ │ └─┬ redis@0.7.2 
│ │   └── hiredis@0.1.14 
│ ├── cookie@0.0.4 
│ ├── crc@0.2.0 
│ ├── debug@0.7.0 
│ ├── ejs@0.8.2 
│ ├── fresh@0.1.0 
│ ├── github-flavored-markdown@1.0.1 
│ ├─┬ hjs@0.0.4 
│ │ └── hogan.js@2.0.0 
│ ├─┬ jade@0.27.2 
│ │ └── mkdirp@0.3.0 
│ ├── methods@0.0.1 
│ ├── mkdirp@0.3.3 
│ ├─┬ mocha@1.4.0
│ │ ├── diff@1.0.2 
│ │ ├── growl@1.5.1 
│ │ └─┬ jade@0.26.3 
│ │   └── mkdirp@0.3.0 
│ ├── range-parser@0.0.4 
│ ├─┬ send@0.0.3 
│ │ └── mime@1.2.6 
│ ├── should@1.1.0 
│ ├─┬ stylus@0.29.0 
│ │ └── cssom@0.2.5 
│ └─┬ supertest@0.0.1 
│   └─┬ superagent@0.5.0 
│     ├── emitter-component@0.0.1 
│     ├── formidable@1.0.9 
│     ├── mime@1.2.5 
│     └── qs@0.4.2 
├─┬ mongodb@1.1.4 
│ └── bson@0.1.1 
└─┬ mongoose@3.0.3 
  ├── hooks@0.2.1 
  └── ms@0.1.0 

所以,express成长很多。看起来npm install只是加载了子模块的一些依赖项。

有人可以对此有所了解吗?为什么缺少一些依赖项?难道我做错了什么?(可能)

谢谢!

默克。

4

3 回答 3

38

您对至少 2 点感到困惑。

首先,express不依赖jade,通过阅读node_modules/express/package.json文件可以看出:

  "dependencies": {
    "connect": "2.4.2",
    "commander": "0.6.1",
    "range-parser": "0.0.4",
    "mkdirp": "0.3.3",
    "cookie": "0.0.4",
    "crc": "0.2.0",
    "fresh": "0.1.0",
    "methods": "0.0.1",
    "send": "0.0.3",
    "debug": "*"
  }

但是,Express 确实可以翡翠(如果可用)以及许多其他模板引擎一起使用。因此,将这个列表 jam 修复为 package.json 文件中的依赖项,你会没事的。

其次,npm 只安装 node 包,不安装第三方的东西,比如 mongodb。您需要使用其他方式(、、手动安装等)安装 mongodb 和任何其他不是 npm 模块的依赖apt-getyum

所以 npm 确实递归地安装依赖项,但只安装 npm 模块。

于 2012-08-26T02:51:47.073 回答
7

布兰登在对另一个答案的评论中提供了答案:

“另外需要注意的是,如果一个包依赖于一个可以在依赖链中进一步解析的模块,它会。例如,由于你的 package.json 中有 mongodb,Mongoose 不需要安装它自己的mongodb. – Brandon Tilley 2天前

谢谢布兰登!(这就是答案……)

于 2012-08-28T14:18:24.057 回答
4

使用此示例

{
  "name": "app",
  "version": "0.0.1",
  "main":"test.js",
  "author":"Test",
  "description": "For test ",
  "dependencies": {
    "express": "latest",
    "mongoose": "latest"
  }

}

于 2016-07-26T12:08:21.247 回答