How to write a package.json file so that all depen

2020-06-30 04:52发布

I wrote a simple application using node. It depends on express, mongodb and mongoose (easy). So, I created a file called package.json and put this in it:

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

I then ran npm install, expecting npm to install those modules and their dependencies. The result was disappointing:

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 

I am confused by this, as I know that express needs jade (and much more), and mongoose needs mongodb.
If I go into node_modules/jade and run npm install, the result from the main tree is very different:

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 

So, express has grown a lot. It looks like npm install is only loading some of the dependencies of the sub-modules.

Can somebody please shed some light on this? Why are some dependencies missing? Am I doing something wrong? (likely)

Thanks!

Merc.

标签: node.js npm
3条回答
孤傲高冷的网名
2楼-- · 2020-06-30 05:03

You are confused about at least 2 points.

First, express does not depend on jade, as you can see by reading the node_modules/express/package.json file:

  "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 does, however, work with jade if it is available, as well as many other template engines. So to fix this list jade as a dependency in your package.json file and you'll be fine.

Second, npm only installs node packages, not third party things like mongodb. You need to install mongodb and any other dependencies that are not npm modules using other means (apt-get, yum, manual install, etc).

So npm DOES install dependencies recursively, but only npm modules.

查看更多
该账号已被封号
3楼-- · 2020-06-30 05:11

use this sample

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

}

查看更多
干净又极端
4楼-- · 2020-06-30 05:27

The answer was provided by Brandon in a comment to another answer:

"Another thing to note is that if a package depends on a module that can be resolved further up in the dependency chain, it will. For example, since you have mongodb in your package.json, Mongoose doesn't need to install its own mongodb. – Brandon Tilley 2 days ago

Thank you Brandon! (And this is the answer...)

查看更多
登录 后发表回答