ant*_*elm 54 javascript node.js npm reactjs npm-install
刚刚遇到这个错误:
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!
Run Code Online (Sandbox Code Playgroud)
我尝试安装的模块似乎与我安装的模块具有不同的对等依赖项。似乎 npm 在这方面改变了它的行为,现在让安装失败。
我现在能做些什么来解决这个问题?我不想为此降级我的 React 版本。
我知道有一个标志被调用,--legacy-peer-deps但我不确定这到底是做什么的,是否建议使用它/潜在的缺点是什么?我认为 npm 确实让安装失败是有原因的。
这很奇怪,因为我yarn直到最近才用完,一切都很好。
Chr*_*rry 67
对这个标志的一种思考方式是它没有做新的事情;而是告诉 NPM不要做新的事情,因为 NPM v7现在默认安装 peerDependencies。
在很多情况下,这会导致版本冲突,从而中断安装过程。
该--legacy-peer-deps标志是在 v7 中引入的,目的是绕过 peerDependency 自动安装;它告诉 NPM 忽略对等节点并继续安装。这就是过去 NPM v4 到 v6 的情况。
如果您不清楚常规 deps 和 peer deps 之间的区别,这里有一些上下文:
依赖项: NPM 模块在生产中工作所需的库或模块。(例如:我最近构建了一个饼图模拟库,它使用Chance.js计算指定范围内的随机数;因此 Chance 是我模块的依赖项。)
peerDependencies:对等依赖项是模块设计用于使用的第三方软件库的特定版本或版本集。它们在概念上类似于浏览器扩展和浏览器之间的关系。(例如:react-redux有两个非常合乎逻辑的 peerDependencies:和。)reactredux
由于大量模块没有专门添加 React v17 作为 peerDependency,现在在 v17 unable to resolve dependency treeReact 应用程序中运行 npm installs 时遇到错误是司空见惯的。
每当一个模块(或其任何自己的依赖项)将 React 的先前版本列为 peerDependency 而没有特别包括React v17 时,就会触发此错误。
(注意:任何其他框架或库的主要版本更新都会发生类似的行为。)
NPM 本身不会在给定模块的页面上列出对等节点。但是,有一个简单的解决方法可以在安装之前或之后检查对等节点。只需运行:
npm info name-of-module peerDependencies
此命令将返回每个 peerDependency 的名称以及所有兼容版本。
--legacy-peer-deps到您的 npm 安装将绕过 peerDependency 自动安装,但这可能会由于潜在的破坏性更改而导致冲突Izz*_*zzi 19
这是我解决这个问题的方法:
首先,发生了什么: react-hook-mousetrap 正在寻找 react@16.8.0,但没有找到。相反,它正在寻找@react17.0.1,这是一个较新的版本。出于某种原因,捕鼠器不喜欢这个较新的版本,您会收到通知(这没什么大不了的,但他们认为值得停止您的构建)。
一种解决方案:强行安装mousetrap想要的特定版本的react:
yarn install react@16.8.0
Run Code Online (Sandbox Code Playgroud)
这样做是将您的反应版本回滚到与捕鼠器兼容的稍旧版本。您不会注意到任何差异,并且在未来的迭代中,希望捕鼠器已更新,因此这种情况会消失。
另一个解决方案:彻底决定不安装任何旧版本的依赖项:
npm install xxxx --legacy-peer-deps
Run Code Online (Sandbox Code Playgroud)
这样做是忽略此包的旧依赖项。它更全面,并为您做出很多决定。
JBa*_*lin 12
- 默认值:假
- 类型:布尔值
peerDependencies导致 npm在构建包树时完全忽略,如 npm 版本 3 到 6 中那样。如果某个软件包由于
peerDependencies冲突过于严格而无法安装,它提供了一种继续解决这种情况的方法。这与 不同
--omit=peer,因为--omit=peer它将避免peerDependencies在磁盘上解包,但仍会设计一棵树,以便peerDependencies可以在正确的位置解包。
legacy-peer-deps不建议使用,因为它不会强制peerDependencies执行元依赖项可能依赖的契约。
如果您想继续使用legacy-peer-deps而不需要向每个命令添加标志,您可以在您的.npmrc(在项目级别或在您的计算机上全局)中配置它:
echo "legacy-peer-deps=true" >> .npmrc
Run Code Online (Sandbox Code Playgroud)
npm 从命令行、环境变量和
npmrc文件获取其配置设置。该
npm config命令可用于更新和编辑用户和全局 npmrc 文件的内容。
| 归档时间: |
|
| 查看次数: |
30847 次 |
| 最近记录: |