报错
npm i定制软件下载包时报以下错误
解读
定制软件上述报错日志中有个关键字眼: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?
- –force 会无视冲突,并强制获取远端npm库资源,即使本地有资源也会覆盖掉
- –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)的处理方式来安装相依套件。