Nodejs中的Dependencies、 devDependencies 、 peerDependencies的比较分析介绍

214 阅读3分钟

在Nodejs项目中,npm是管理依赖关系的默认包管理器。在任何语言的每个应用开发中,都需要依赖性来构建和开始运行应用程序。每个应用程序都有一个包含所有直接和间接依赖关系的依赖树。依赖关系是执行应用程序所需的模块或库代码。每个依赖关系也被称为包,它可以在包中声明,每个对象都包含名称和版本。
依赖关系类型
在nodejs应用程序中,依赖关系是在package.json中定义的 以下是使用npm的依赖关系类型

  1. 正常的依赖关系
  2. devDependencies
  3. 同伴依赖
  4. 可选依赖项
  5. 捆绑的依赖项

依赖关系可以通过两种方式安装

在package.json的依赖类型部分添加依赖对象,然后用npm安装

另一种方法是使用npm安装依赖性

package.json包含所有需要的依赖,如下所示

{  
  "name": "DepedencyTypes",  
  "version": "1.0.0",   
  "dependencies": {  
    "packageone": "^1.1.0"  
  },  
  "devDependencies": {  
    "packagetwo": "^1.4.0"  
  },  
  "peerDependencies": {  
    "packagethree": "^1.2.1"  
  },  
  "optionalDependencies": {  
    "packagefive": "^1.7.0"  
  },  
  bundledDependencies{  
    "packagesix": "^1.7.0"  
  },  
}  

每个应用程序都有在生产代码中运行的代码,也有与捆绑和单元测试马尼应用程序开发中代码相关的代码。

生产的正常依赖性

这些是配置的依赖,需要在运行时顺利地执行应用程序。这些也被称为生产依赖性。这可以用npm install命令来安装 这些将使用和安装一个使用横向依赖关系的依赖树。

one --> two--> three  

如果应用程序安装了 "一个 "依赖,那么第二个和第三个也会安装。

一个例子是Angular或React的依赖。这可以包含在package.json的dependencies部分。npm install命令将安装dependencies和devDependencies。如果只安装依赖项,不安装开发依赖项,请使用下面的命令

npm install --production  

这也可以使用npm install library -save-prod来保存

开发依赖性。

这些是在开发阶段构建和测试应用程序所需的。这些被称为开发依赖,因为在生产运行时并不需要。Devdependent部分包含了package.json中的所有开发依赖项 所有你的捆绑器如webpack、bower、grunt和单元测试库如jasmine、karma、protector、linter库都是开发依赖项 devDependencies是通过npm install命令安装的,它也会安装依赖项。要安装开发依赖项

也可以使用npm install library -save-dev
来保存并进行安装,这些安装不是反式的依赖关系

如果应用程序安装了 "一个 "依赖,第二和第三个也不会安装。

package.json中的Peerdependencies

这也是生产依赖,但在不同的环境下用于发布库。例如,你正在使用Angular/CDK库编写你自己的UI库,如material,这意味着你的库依赖于Angular CDK。在发布你的库的过程中,angular/CDK库必须被声明为同行依赖。这样,无论谁使用你的库都必须包括确切的angular CDK依赖。这些将被包含在package.json的peerDependencies部分。

可选的依赖关系

optionalDependencies是可选的依赖,如果你在你的应用程序中声明了optionalDependencies,应用程序将无法安装它,结果显示成功。这在依赖环境的情况下非常有用,这将导致某些环境的安装失败。
optionalDependencies是必须在package.json中声明的部分。
捆绑的和普通的依赖会寻找远程npm注册表并安装,而捆绑的依赖不会寻找远程npm注册表,相反,它会寻找应用程序中的依赖。这将使用npm packyarn pack命令来创建一个应用程序的giz。当你同时在一个库和一个应用程序上工作以调试代码问题时,这将是非常有用的,将使用npm pack压缩一个库并在应用程序中声明这个依赖为peerDepedencies。