npm install xxxx --legacy-peer-deps
阅读数:105 评论数:0
跳转到新版页面分类
html/css/js
正文
一、概述
在使用npm下载依赖的时候,常常会遇到无法解析依赖树的问题(依赖冲突)。
unable to resolve dependency tree
这里使用--legacy-peer-deps就可以解决这个问题。
二、peerDependency
1、定义
开发过程中,在package.json文件里我们常见devDependencies(用于开发环境下依赖的模块)和dependencies(任何环境下都需要的依赖模块)。
而peerDependency,引用下文件解释:
Peer Dependencies: In package.json file, there is an object called as peerDependencies and it consists of all the packages that are exactly required in the project or to the person who is downloading and the version numbers should also be the same. That is the reason they were named as peerDependencies. The best example is ‘react’ which is common in every project to run similarly.
2、说明示例
假设我们现在有一个HelloHWCloud工程,已经在其根目录下的package.json文件中的dependencies字段里声明了packageA作为依赖,而其下面有两个项目app_A和app_B,它们也依赖packageA。如果我们用dependencies而不是peerDependencies来声明,那么npm install安装完项目之后的依赖结构如下:上面的文字,是不是读得有点蒙,以一个例子解释一下:
├── HelloHWCloud
│ └── node_modules
│ ├── packageA
│ ├── app_A
│ │ └── nodule_modules
│ │ └── packageA
│ └── app_B
│ │ └── nodule_modules
│ │ └── packageA
可以看到packageA依赖包被安装了3次。
而如果采用peerDependency来下载,就可以避免这个依赖库被重复下载的问题。我们在项目app_A和app_B的package.json文件里的peerDependencies字段声明一下核心依赖库packageA,然后在根目录的apckage.json文件里的dependencies字段也声明一下packageA。接着再执行npm install,生成的依赖结构就会如下:
├── HelloHWCloud
│ └── node_modules
│ ├── packageA
│ ├── app_A
│ └── app_B
3、npm v7之后
npm从版本v7开始,install默认以peerDependencies方式去下载了:
(1)如果用户在根目录的package.json文件里显式依赖核心库,那么各子项目里的peerDependencies声明将被忽略。
(2)如果用户没有显示依赖核心库,那么就按照子项目的peerDependencies中声明的版本依赖安装到项目根目录里。
而方式2就可能产一依赖冲突的问题:用户依赖的包版本与各子项目的包版本相互不兼容,导致安装过程中断。
三、--legacy-peer-deps如何解决依赖冲突
legacy的意思:
遗产/(软件或硬件)已过时但因使用范围广而难以替代的
npm install xxxx --legacy-peer-deps
命令用于绕过peerDependencies里依赖的自动安装,它使各modules之间的相同modules但版本不同的都下载,即保证各个引用的依赖之间对自身所使用的不同版本modules存。