如何编写一个package.json文件,使所有的依赖关系下载“npm install”

我用节点写了一个简单的应用程序。 这取决于快速,mongodb和mongoose(简单)。 所以,我创build了一个名为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只是加载子模块的一些依赖关系。

请问有人可以谈谈这个? 为什么缺less一些依赖关系? 难道我做错了什么? (可能)

谢谢!

芝加哥商业交易所。

你至less弄糊涂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": "*" } 

然而,快递, 如果可用,还有许多其他模板引擎。 所以要解决这个列表玉作为你的package.json文件的依赖,你会没事的。

其次,npm只安装节点包,而不是像mongodb这样的第三方的东西。 您需要使用其他方式( apt-getyum ,手动安装等)来安装mongodb和任何不是npm模块的其他依赖项。

所以npm DOESrecursion地安装依赖关系,但只有npm模块。

Brandon在对另一个答案的评论中提供了答案:

“另外需要注意的是,如果一个包依赖于一个可以在依赖关系链中进一步parsing的模块,那么它就可以了。例如,因为在你的package.json中有mongodb,所以Mongoose不需要自己安装mongodb。 – 布兰登蒂利2天前

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

使用这个示例

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