刚刚遇到了这个错误:
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让安装失败是有原因的。
这很奇怪,因为直到最近我都在用纱线,而且一切都很好。
legacy-peer-deps:
Default: false
Type: Boolean
Causes npm to completely ignore peerDependencies when building a package tree, as in npm versions 3 through 6.
If a package cannot be installed because of overly strict peerDependencies that collide, it provides a way to move forward resolving the situation.
This differs from --omit=peer, in that --omit=peer will avoid unpacking peerDependencies on disk, but will still design a tree such that peerDependencies could be unpacked in a correct place.
Use of legacy-peer-deps is not recommended, as it will not enforce the peerDependencies contract that meta-dependencies may rely on.
如果你想继续使用legacy-peer-deps,而不需要在每个命令中添加标志,你可以在你的.npmrc中配置它(在项目级别或在你的机器上全局):
echo "legacy-peer-deps=true" >> .npmrc
npmrc:
NPM从命令行、环境变量和NPMRC文件中获取配置设置。
npm config命令可以用来更新和编辑用户和全局npmrc文件的内容。
下面是我解决这个问题的方法:
首先,发生了什么:react-hook-mousetrap正在寻找react@16.8.0,但是没有找到它。相反,它会找到@react17.0.1,这是一个更新的版本。出于某种原因,mousetrap不喜欢这个更新的版本,并且您正在被通知(这不是一个大问题,但他们认为值得停止您的构建)。
一个解决方案:强制安装mousetrap想要的特定版本的react:
yarn add react@16.8.0
这样做的目的是将react版本回滚到与mousetrap兼容的稍微旧一点的版本。您不会注意到任何不同,在未来的迭代中,希望mousetrap会得到更新,这样就不会出现这种情况。
另一个解决方案:彻底决定不安装任何旧版本的依赖:
npm add xxxx --legacy-peer-deps
这样做的目的是忽略这个包的旧依赖项。它更全面,能为你做很多决定。