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

How to write a package.json file so that all dependencies are downloaded with "npm install"

提问人:Merc 提问时间:8/26/2012 更新时间:7/26/2016 访问量:72726

问:

我使用node编写了一个简单的应用程序。这取决于 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 安装这些模块及其依赖项。 结果令人失望:npm install

[email protected] /home/merc/Synced/Development/Bookings/app/server
├─┬ [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ └─┬ [email protected] 
│   └── [email protected] 
├─┬ [email protected] 
│ └── bso[email protected] 
└─┬ [email protected] 
  ├── [email protected] 
  └── [email protected] 

我对此感到困惑,因为我知道需要(以及更多)和需要.
如果我进入并运行,主树的结果非常不同:
expressjademongoosemongodbnode_modules/jadenpm install

[email protected] /home/merc/Synced/Development/Bookings/app/server
├─┬ [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ └── [email protected] 
│ ├─┬ [email protected] 
│ │ └─┬ [email protected] 
│ │   └── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ └── [email protected] 
│ ├─┬ [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected]
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ └─┬ [email protected] 
│ │   └── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ └── [email protected] 
│ └─┬ [email protected] 
│   └─┬ [email protected] 
│     ├── [email protected] 
│     ├── [email protected] 
│     ├── [email protected] 
│     └── [email protected] 
├─┬ [email protected] 
│ └── bso[email protected] 
└─┬ [email protected] 
  ├── [email protected] 
  └── [email protected] 

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

有人可以对此进行一些说明吗?为什么缺少某些依赖项?我做错了什么吗?(可能)

谢谢!

默克。

节点 .js npm

评论


答:

38赞 Peter Lyons 8/26/2012 #1

您至少对 2 点感到困惑。

首先,express不依赖于翡翠,正如你通过阅读文件所看到的那样: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 确实可以使用 jade(如果可用)以及许多其他模板引擎。因此,要将此列表翡翠修复为package.json文件中的依赖项,您就可以了。

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

所以 npm 确实以递归方式安装依赖项,但仅限于 npm 模块。

评论

1赞 Michelle Tilley 8/26/2012
另一件需要注意的事情是,如果一个包依赖于一个模块,而这个模块可以在依赖链中进一步解析,那么它就会。例如,由于您在package.json中,Mongoose 不需要安装自己的 .mongodbmongodb
0赞 Merc 8/26/2012
布兰登,这就是答案。我不久前才想通。基本上,它不会在 Mongoose 下安装 MongoDb,因为它被进一步解析。既然这是实际的答案,你能不能把它添加为一个正确的答案,而不是一个评论,这样我就可以接受它了?
0赞 Merc 8/26/2012
@Peter 好的一点,但是 express 生成的应用程序将 express 作为依赖项 BTW。我的问题,“为什么缺少一些依赖项?”,有一个简单的答案(由Brandon提供)“它们丢失了,因为它们在依赖关系树中进一步解析”。谢谢!
7赞 Merc 8/28/2012 #2

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

“另一件需要注意的事情是,如果一个包依赖于一个模块,而这个模块可以在依赖链中进一步解析,那么它就会。例如,由于您的package.json中有 mongodb,因此 Mongoose 不需要安装自己的 mongodb。– 布兰登·蒂利 2天前

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

4赞 M.Ganji 7/26/2016 #3

使用此示例

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

}