我使用Node.js编写了一个简单的应用程序,它依赖于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
需要jade
(以及其他很多东西),而mongoose
需要mongodb
。
如果我进入node_modules/jade
并运行npm 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
仅加载了子模块中一些依赖项。
有人能否请解释一下?为什么会缺少某些依赖项?我是否做错了什么?(很可能)
谢谢!
Merc.
mongodb
,Mongoose不需要安装自己的mongodb
。 - Michelle Tilley