如何编写package.json文件,以便使用"npm install"下载所有依赖项

Mer*_*erc 28 node.js npm

我用节点编写了一个简单的应用程序 这取决于快递,mongodb和猫鼬(简单).所以,我创建了一个名为的文件package.json并将其放入其中:

{
  "name": "booking-dojo",
  "description": "Booking dojo app",
  "version": "0.0.1",
  "private": true,
  "dependencies": {
    "express": "3.x",
    "mongodb": "*",
    "mongoose": "*"
  }
}
Run Code Online (Sandbox Code Playgroud)

然后我跑了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 
Run Code Online (Sandbox Code Playgroud)

我为此感到困惑,因为我知道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 
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢!

芝加哥商业交易所.

Pet*_*ons 39

你至少对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": "*"
  }
Run Code Online (Sandbox Code Playgroud)

但是,Express可以使用 jade(如果可用)以及许多其他模板引擎.所以要修复这个列表jade作为package.json文件中的依赖项,你会没事的.

其次,npm只安装节点包,而不是像mongodb这样的第三方.您需要安装的MongoDB和任何其他依赖关系都没有用其他的方法(NPM模块apt-get,yum手动安装,等等).

所以npm DOES递归安装依赖项,但只有npm模块.


Mer*_*erc 7

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

"需要注意的另一件事是,如果一个包依赖于一个可以在依赖链中进一步解析的模块,它会.例如,因为你的package.json中有mongodb,所以Mongoose不需要自己安装mongodb. - Brandon Tilley 2天前

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