如何写的package.json文件,以便所有的依赖与下载的“故宫安装”(How to write

2019-07-31 05:05发布

我写了使用节点的简单应用。 它依赖于快递,MongoDB的和猫鼬(容易)。 所以,我创建了一个文件调用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只加载某些子模块的依赖关系。

可有人请阐明这一些轻? 为什么一些依赖丢失? 难道我做错了什么? (可能)

谢谢!

芝加哥商业交易所。

Answer 1:

你感到困惑至少2分。

首先,表达不通过读取依赖于玉,你可以看到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版本,然而, 玉工作,如果它是可用的,以及许多其他的模板引擎。 因此,要解决这个名单玉在你的package.json文件的依赖,你会没事的。

其次,NPM只安装节点程序包,而不是第三者之类的东西的MongoDB。 您需要安装的MongoDB和不是用其他的方法(NPM模块的任何其他依赖apt-getyum ,手动安装,等等)。

所以故宫具备递归安装依赖,但只有NPM模块。



Answer 2:

答案是由布兰登在另一个答案评论提供:

“另外要注意的是,如果一个软件包依赖,可以进一步向上的依赖关系链来解决一个模块,它将。例如,由于你在的package.json已经MongoDB中,猫鼬并不需要安装自己MongoDB的 - 布兰登蒂利3天前

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



Answer 3:

使用此示例

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



文章来源: How to write a package.json file so that all dependencies are downloaded with “npm install”
标签: node.js npm