在Nodejs项目中,npm是管理依赖关系的默认包管理器。在任何语言的每个应用开发中,都需要依赖性来构建和开始运行应用程序。每个应用程序都有一个包含所有直接和间接依赖关系的依赖树。依赖关系是执行应用程序所需的模块或库代码。每个依赖关系也被称为包,它可以在包中声明,每个对象都包含名称和版本。
依赖关系类型
在nodejs应用程序中,依赖关系是在package.json中定义的 以下是使用npm的依赖关系类型
- 正常的依赖关系
- devDependencies
- 同伴依赖
- 可选依赖项
- 捆绑的依赖项
依赖关系可以通过两种方式安装
在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 pack或yarn pack命令来创建一个应用程序的giz。当你同时在一个库和一个应用程序上工作以调试代码问题时,这将是非常有用的,将使用npm pack压缩一个库并在应用程序中声明这个依赖为peerDepedencies。