安装npm包时出现无法解析依赖树的错误

720

尝试使用npm i命令安装npm软件包时,我遇到了以下异常:

图片描述

我已尝试重新安装Node.js软件包并通过以下方式关闭代理:

set HTTP_PROXY=
set HTTPS_PROXY=
问题依然存在。我做错了什么吗? 更新: 当我运行以下命令时:
npm install --legacy-peer-deps
以下错误显示:

在此输入图片描述


5
请展示你的package.json文件 - 看起来你已经升级了@angular/core,但没有升级@angular/http? - Adam Jenkins
package-lock.json文件不可用。是的,我已经尝试删除node_modules,但没有成功。 - Pearl
1
这个问题还在发生吗?你能分享一下 package.json 文件吗? - Supun Praneeth
这个问题解决了吗?如果是的话,如果任何答案对您有帮助,请将其中一个标记为“已接受”。否则,如果您需要更多澄清,请告诉我们。 - Eliezer Berlin
对我来说,由于我有备份,所以我删除了本地仓库并进行了全新的拉取,然后再次尝试 npm install,这对我起作用了。 - Huzaifa
显示剩余7条评论
37个回答

11
免责声明:此假设您使用的是npm v7+。
注意:如果您按照其他评论者的指示操作,它将创建一个用户范围的配置,这将无法在团队成员、机器或构建机之间保持一致性。
基于项目的旧版对等依赖关系
您可能希望将legacy-peer-deps 与您的项目绑定,以便它在不同机器/开发者之间传播,并且不会影响您的其他项目。
npm config set legacy-peer-deps true --location project

这将在您的本地创建一个名为.npmrc的文件,您可以将其提交到您的代码库中。
legacy-peer-deps=true

然后,之后你只需要运行:
npm install

然后提交更新的锁定文件。
记住,位置,位置,位置
  • 每个项目的配置/path/to/my/project/.npmrc查看更多):

    npm config set legacy-peer-deps true --location project
    
  • 每个用户的配置(默认为$HOME/.npmrc查看更多

    npm config set legacy-peer-deps true --location user
    

    或者,由于默认位置已经是用户:

    npm config set legacy-peer-deps true
    
  • 全局配置(默认为$PREFIX/etc/npmrc查看更多

    npm config set legacy-peer-deps true --location global
    

    或者,由于--global暗示了--location global

    npm config set legacy-peer-deps true --global
    
对于某些项目来说,修复依赖关系可能并不容易。
在我的情况下,我们有一个关键的依赖项,它是一个旧版本,想要引入 webpack v3 (!) - 但这是该项目的构建依赖项。
短期内最好的解决方案是使用 "legacy-peer-deps" 作为过渡。
如果你急需解决问题,你也可以考虑分叉该依赖项并相应地调整其对等依赖关系 - 然后将你的项目指向该分叉版本。

11

尝试删除 node_modulespackage-lock.json 文件,然后运行命令 npm install, 或者 尝试使用命令 npm cache clean --force


11

首先我尝试了

npm install

它给了我一个错误:无法解析依赖树,根据这个命令提供的帮助信息,

Fix the upstream dependency conflict, or retry
npm ERR! this command with --force, or --legacy-peer-deps
npm ERR! to accept an incorrect (and potentially broken) dependency resolution.

我尝试了这个命令:

npm install --legacy-peer-deps

它解决了我的问题。


10
尝试以下两种方法解决此问题:
  • 选项1:运行以下命令后,删除文件夹node_modules和文件package_lock.jsonnpm cache clean --force after npm i --force

  • 选项2:运行npm install --save --legacy-peer-deps命令。


9

您可以使用两种方式安装软件包,它正在显示此错误信息。

ERESOLVE unable to resolve dependency tree
  1. 使用npm install命令安装包,并加上--legacy-peer-deps选项。
npm install --save --legacy-peer-deps
  1. This is a combination of two commands

    a. Set legacy-peer-deps true in npm config

    npm config set legacy-peer-deps true
    

    b. Now install packages using npm install

    npm install
    

8

最快的解决方案:npm install --legacy-peer-deps

说明:

在npm v3到v6版本中,peerDependencies不会自动安装,如果在树中发现无效版本的peer依赖项,则会引发警告。从npm v7开始,默认情况下会安装peerDependencies。

npm文档:peerDependencies

您的依赖项包含与根项目依赖项冲突的某些peerDependencies。

npm ERR日志所述。


5
这对我有效:

npm install --save --legacy-peer-deps

5
问题似乎在于 gf-kautomata-pipeline-ui 使用的是 Angular 9,而 @angular/http 要求的是 Angular 7。(@angular/http 已被弃用并最终移除,其所有功能都已转移到 @angular/common 中。)
参见:https://www.npmjs.com/package/@angular/http 如果您正在运行 Angular 9,则需要:
  1. 从您的 package.json 中删除 @angular/http(在 Angular 9 中不需要它)。
  2. 确保您的 package.json 中有 @angular/common
  3. 运行 npm i
如果您正在运行 Angular 7,则请打开您的 package.json 并检查所有的 Angular 包是否不高于 ^7.0.0。您可能还需要删除 gf-kautomata-pipeline-ui,或与 gf-kautomata-pipeline-ui 的作者联系并了解该库是否与 Angular 7 兼容。

@Pearl,我在评论中看到你写道你的@angular/core是Angular 9,而不是Angular 7。你是在从7升级到9的过程中吗? - Eliezer Berlin
1
这绝对是最准确的答案。 - CrsCaballero

3
在我的情况下,我在将npm从版本6升级到7后遇到了以下错误:

npm ERR!code ERESOLVE npm ERR!ERESOLVE无法解决依赖项树

...

npm ERR!修复上游依赖项冲突,或使用--force或--legacy-peer-deps重试此命令以接受不正确(可能已损坏)的依赖项解析。

在我的情况下,使用--legacy-peer-deps--force标记进行编译会生成一个无用的包。因此,我尝试删除node_modulespackage-lock.json和包并使用yarn install重新安装。这将生成一个yarn.lock文件,并创建一个可在随后的npm运行中正常工作的package-lock.json
附注: 我正在使用临时解决方法,直到npm 7能够与我的项目正常配合使用:之后,我将删除yarn.lockpackage-lock.jsonnode_modules文件夹,并使用npm重新编译。
rm -rf node_modules
rm package-lock.json
yarn install
# Generates a yarn.lock file and a new package-lock.json

# Continue with npm
npm start

2

使用

npm install --legacy-peer-deps

这对我很有帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接