遇到此错误:
npm ERR! code ERESOLVE
npm ERR! ERESOLVE unable to resolve dependency tree
npm ERR!
npm ERR! While resolving: nexttwin@0.1.0
npm ERR! Found: react@17.0.1
npm ERR! node_modules/react
npm ERR! react@"17.0.1" from the root project
npm ERR!
npm ERR! Could not resolve dependency:
npm ERR! peer react@"^16.8.0" from react-hook-mousetrap@2.0.4
npm ERR! node_modules/react-hook-mousetrap
npm ERR! react-hook-mousetrap@"*" from the root project
npm ERR!
我试图安装的模块似乎与我已经安装的模块有不同的对等依赖关系。看起来npm在这方面改变了它的行为,现在让安装失败。
我现在可以做些什么来解决这个问题?我不想因此而降级我的React版本。
我知道有一个名为--legacy-peer-deps
的标志,但我不确定它到底有什么作用,是否建议使用它/潜在的缺点是什么?我认为npm让安装失败是有原因的。
这很奇怪,因为我一直在使用yarn
,直到最近,一切都很好。
6条答案
按热度按时间hk8txs481#
TL;DR:
如果您是从NPM v6 / Node v12升级,您可能会得到这个答案。
--legacy-peer-deps
会忽略此新要求,这可能会引入破坏性更改--legacy-peer-deps从NPM v4到v6恢复对等依赖关系安装行为
一种看待这面旗帜的方式是,它并没有做什么新的事情;相反,它告诉NPM * 不要 * 做一些新的事情,因为NPM v7现在默认安装了对等依赖关系。
在许多情况下,这会导致版本冲突,从而中断安装过程。
--legacy-peer-deps
标志是在v7中引入的,作为一种绕过peerDependency自动安装的方法;它告诉NPM忽略对等部门并继续安装。这是NPM v4到v6的工作方式。如果你不清楚常规部门和同级部门之间的区别,这里有一点背景:
依赖项与对等依赖项
**相依性:*NPM模块需要的程式库或模块, 以便在生产环境中运作 *。(范例:我最近构建了一个饼图模拟库,它使用Chance.js来计算指定范围内的随机数;因此,机会是我的模块的一个 * 依赖 。)
对等依赖项:对等依赖关系是第三方软件库的一个 * 特定版本或一组 * 版本, 模块设计用于 * 该软件库。它们在概念上类似于浏览器扩展和浏览器之间的关系。(例如:react-redux具有两个逻辑上相当合理的对等依赖关系:
react
和redux
)。此问题部分是由React v17+驱动的
由于大量模块没有专门添加React v17(或最近的React 18)作为peerDependency,现在在v17 React应用程序中运行npm安装程序时,经常会遇到
unable to resolve dependency tree
错误。每当模块(或其自身的任何依赖项)将React的先前主版本作为peerDependency列出,而没有 * 特别包括 * React v17时,就会引发此错误。
(* 注意:* 任何其他框架或库的主版本更新都会出现类似的行为。)
如何检查任何给定模块的对等依赖关系
NPM本身不会在给定模块的页面上列出对等部门。但是,有一个简单的解决方案可以在安装之前或之后检查对等部门。只需运行:
npm info name-of-module peerDependencies
此命令将返回每个peerDependency的名称沿着所有兼容版本。
hc8w905p2#
下面是我解决这个问题的方法:
**首先,发生了什么:**react-hook-mousetrap正在寻找react@16.8.0,但没有找到。相反,它找到了@react17.0.1,这是一个较新的版本。由于某种原因,mousetrap不喜欢这个较新的版本,并通知了您(这不是什么大事,但他们认为值得停止您的构建)。
一种解决方案:强制安装mousetrap需要的react特定版本:
这样做的目的是将react版本回滚到与mousetrap兼容的稍旧版本,您不会注意到任何差异,在未来的迭代中,希望mousetrap得到更新,这样就不会出现这种情况。
**另一个解决方案:**做出彻底的决定,不安装任何旧版本依赖项:
它所做的是忽略这个包的旧依赖项。它更全面,并为您做出很多决定。
thigvfpy3#
我决定(使用Yarn)将以下内容添加到package.json
o4tp2gmn4#
如果您不想阻止安装旧的依赖项,可以通过强制运行您正在运行的脚本来使npm忽略这些警告。
--force
8e2ybdfx5#
--leagcy-peer-deps
跳过所有peer依赖的安装,并给出peer deps的警告,提醒开发人员手动安装,当遇到peer deps冲突时,除了--legacy-peer-deps
,还有一种选择是使用--force
。处理对等部门冲突的官方文档为this
附言
纠正上面的回答:
--leagcy-peer-deps
将peerDependency安装行为从NPMv3恢复到v6,而不是从v4恢复到v6。qlzsbp2j6#
另一种方法是将您的npm版本降级到版本6。