npm install:Could not resolve dependency:peer... 原因和解决方案

报错

vue项目npm i下载包时报以下错误

npm install:Could not resolve dependency:peer... 原因和解决方案_第1张图片

解读

上述报错日志中有个关键字眼:this command with --force, or --legacy-peer-deps
Fix the upstream dependency conflict, or retry
this command with --force, or --legacy-peer-deps
to accept an incorrect (and potentially broken) dependency resolution.
意思是:修复上游依赖性冲突,或使用–force或–legacy-peer-deps重试此命令,以接受不正确的(并且可能会损坏的)依赖性解析。
-f或–force参数将强制npm获取远程资源,即使磁盘上存在本地副本也是如此。

这样的关键字,这是npm版本的依赖冲突的提示使然,
那么npm:何时使用–force和–legacy-peer-deps?

  1. –force 会无视冲突,并强制获取远端npm库资源,即使本地有资源也会覆盖掉
  2. –legacy-peer-deps:安装时忽略所有peerDependencies,忽视依赖冲突,采用npm版本4到版本6的样式去安装依赖,已有的依赖不会覆盖,。

建议用–legacy-peer-deps 比较保险一点

原因

NPM v7 预设会安装peerDependencies,默认情况下,npm install当遇到冲突的peerDependencies时将失败。以前不是那样的,这会导致某些套件出现相依性问题,所以可能会在npm install这个时候加上–legacy-peer-deps参数来解决这个问题,来了解一下这个问题。

你是在使用 NPM 的 v6 不会出现这个问题,因为默认不会自动执行安装peerDependencies套件,如果在各个版本的资料中,将夹入 v3 的各个目标套件相依的套件。

什么是 peerDependencies

我们在package.json中应该都可以看到dependencies和devDependencies该类设置相依套件的属性,分别是相依和开发相依的套件,但实际上NPM有以下5种相依到件的阶段设置:

依赖相依套件
devDependencies开发阶段套件
peerDependencies对等套件
bundledDependencies捆绑套件
可选依赖项任选套件
bundledDependencies是在发布时需要捆绑的一个套件npm pack,将相关套件在执行时的套件中使用。

optionalDependencies可选这些套件,当你安装套件时,如果该套件不存在,则跳过此套件而不会发生错误。

而peerDependencies会用在多个对等(或称当)的套件都同一个套件时,就可以通过依此属性来设置套件的相套件。

套装相依性问题

peerDependencies的立意良善,但对于一些专案来说,可能会造成一整套相依性的问题。
这个时候,npm在执行npm install的时候,可以–legacy-peer-deps自动安装peerDependencies不同的版本,因为我们可以根据自己的不同版本设置不同的版本。

也就是让 NPM v7 用旧的(v3~v6)的处理方式来安装相依套件。

你可能感兴趣的:(vue,vue,npm)