安装 npm 包时无法解决依赖树错误

Pea*_*arl 181 npm angularjs typescript angular angular9

尝试使用npm i命令安装 npm 包时,出现以下异常:

在此处输入图片说明

我尝试重新安装节点 js 包并将代理设置为关闭使用:

set HTTP_PROXY=
set HTTPS_PROXY=
Run Code Online (Sandbox Code Playgroud)

问题仍然存在。我做错了什么?

更新:

当我运行以下命令时:

npm install --legacy-peer-deps
Run Code Online (Sandbox Code Playgroud)

显示以下错误: 在此处输入图片说明

Ami*_*rzi 254

这与http代理无关。

正如它所说,您有依赖项冲突不正确且可能损坏的依赖项),因此请尝试使用--force, 或运行命令--legacy-peer-deps。如果不生效,临时解决方案使用节点的先前版本(降级节点版本),因为它有时会导致发生此类错误。

基于 OP 的更新更新

如您所见,它会触发以下错误:

找不到与 @angular/http@^9.1.4 匹配的版本。

看看angular/http页面请注意,该弃用软件包的最新版本是7.2.16您请求更高版本时(例如^9.1.4!因此,请尝试检查项目依赖项并按照引发的错误来解决问题。

  • 谢谢 `npm install --legacy-peer-deps` 对我有用 (24认同)
  • @Aashiqahmed 它告诉 NPM *忽略*对等部门并继续安装 (7认同)
  • 谢谢,将节点版本从 15 降级到 14 对我有用。 (5认同)
  • 使用 --legacy-peer-deps 的输出更新了问题。谢谢 (3认同)

Ali*_*san 106

试试这个命令——

npm install --save --legacy-peer-deps
Run Code Online (Sandbox Code Playgroud)

  • 请解释一下它的作用 (49认同)
  • 如果使用 npm 5 或更高版本,则不需要 --save 标志,因为它会自动保存依赖项 (3认同)
  • 它一半安装 Angular 7,一半安装 Angular 9。如果你这样做,它实际上可能会起作用,但愿上帝怜悯你,因为你肯定正在运行一些与当前版本的 Angular 不兼容的库。 (2认同)

小智 68

首先,在终端中执行此操作。

npm config set legacy-peer-deps true
Run Code Online (Sandbox Code Playgroud)

二、清除缓存:

npm cache clean --force
Run Code Online (Sandbox Code Playgroud)

最后,执行你的命令。

  • 请添加解释。 (14认同)
  • 清除缓存有帮助吗?我们真的需要第 2 步吗? (4认同)

fri*_*mle 47

除了使用--legacy-peer-deps命令行选项外,还可以将其设置为更永久的配置选项:

npm config set legacy-peer-deps true
Run Code Online (Sandbox Code Playgroud)

  • 这是做什么的 (9认同)
  • 如果 `npm install` 是间接运行的,例如通过脚本运行,那么这是最好的选择。 (2认同)

Tro*_*ott 42

使用npm7 时,这会出现很多,因为对等依赖问题在版本 7 中被视为错误,而它们通常只是版本 6 中的警告。 通常使用--legacy-peer-deps使其与npm7 一起使用。

当这不起作用时,一个选项是降级到npm6。降级 Node.js 没有必要(但也无害)。相关的依赖管理代码在npm. 降级 Node.js 通常会巧合,因为这样做通常也会降级npm

另一个比降级破坏性更小的选项npm是使用npx先前版本npm的安装命令:npx -p npm@6 npm install

当所有其他方法都失败时,通常值得尝试删除node_modules目录和package-lock.json,然后npm install再次运行。再生node_modulespackage-lock.json

  • @alentejo 通过删除 C:\Users\{your name}\AppData\Roaming 中的 npm 文件夹, npm cache clear --force 然后 npm install -g npm@<version> (2认同)

kmg*_*mgt 31

更新到 npm 7 后,某些软件包会发生这种情况。

参数--legacy-peer-deps可以帮助:

npm i --legacy-peer-deps
Run Code Online (Sandbox Code Playgroud)

这里描述了legacy-peer-deps

导致 npm 在构建包树时完全忽略 peerDependencies,如 npm 版本 3 到 6。

如果由于过于严格的 peerDependencies 冲突而无法安装包,则它提供了一种解决问题的方法。
...

您可以true默认将此选项设置为(npm 不推荐):

npm config set legacy-peer-deps true
Run Code Online (Sandbox Code Playgroud)

或者只是等到这些包更新。


Mis*_*r X 16

该问题与依赖项冲突或依赖项损坏有关。您可以通过强制安装接受依赖关系的不正确来继续。

解决方案:使用带有--force.

你的命令将是这样的npm install --force @your-npm-package

注意:yarn如果可以使用纱线包管理器安装依赖项,则可以使用它来安装依赖项。


Rig*_*eka 14

NPM可用于安装和管理项目中依赖项的版本。

我在与 npm 版本相关的 React 版本上遇到了同样的问题:

npm 发现错误 types/react@16.14.20

因此,可能需要根据您的package.json文件安装软件包版本。

在 npm 7 版本中出现错误,无法安装 Node.js 模块。

如果您将npm 版本降级到 6,这些问题将变成警告并且问题将得到解决。

  • 尝试证明这个命令:npm install -g npm@6

  • 检查版本是否已安装:npm --version

  • 删除并安装node_modules包:

    a) 删除rm -rf node_modules

    b) 安装:npm i


Ton*_*ock 13

免责声明:这假设您使用的是 npm v7+

注意:如果您按照兄弟评论者的说明进行操作,它将创建一个用户范围的配置,该配置不会在队友/机器/构建机器人之间一致同步。

基于项目的遗留对等依赖关系

您可能希望与您的项目绑定在一起,以便它在机器/开发人员之间扩散,并且不会污染您的其他项目。legacy-peer-deps

npm config set legacy-peer-deps true --location project
Run Code Online (Sandbox Code Playgroud)

这将创建一个本地文件,.npmrc您可以在其中提交到存储库:

legacy-peer-deps=true
Run Code Online (Sandbox Code Playgroud)

然后,您可以运行:

npm install
Run Code Online (Sandbox Code Playgroud)

然后提交更新的锁定文件。

记住,位置,位置,位置

对于某些项目,修复依赖关系可能并不简单

就我而言,我们有一个旧版本的关键依赖项想要引入 webpack v3(!) - 但这是该项目的构建依赖项。

短期内最好的解决方案是用作legacy-peer-deps保留。

如果您手头紧,您还可以考虑分叉依赖项并相应地调整其对等依赖项 - 然后将您的项目指向分叉。


小智 11

首先我尝试过

npm install
Run Code Online (Sandbox Code Playgroud)

它给了我错误unable to resolve dependency tree并根据此命令的帮助信息,

npm install
Run Code Online (Sandbox Code Playgroud)

我尝试了这个命令:

npm install --legacy-peer-deps
Run Code Online (Sandbox Code Playgroud)

它解决了我的问题。


小智 10

尝试两个选项来解决此问题:

  • 选项1:运行后 删除文件夹node_modules文件夹和文件package_lock.json :npm cache clean --force after npm i --force

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


小智 9

尝试删除node modulespackage-lock.json文件并运行命令npm install 或尝试npm cache clean --force


小智 9

您可以使用显示此错误的两种方式安装软件包:

ERESOLVE unable to resolve dependency tree
Run Code Online (Sandbox Code Playgroud)
  1. npm install使用并具有安装包--legacy-peer-deps

    npm install --save --legacy-peer-deps
    
    Run Code Online (Sandbox Code Playgroud)
  2. 这是两个命令的组合

    A。将legacy-peer-deps设置为truenpm config

    npm config set legacy-peer-deps true
    
    Run Code Online (Sandbox Code Playgroud)

    b. 现在使用安装包npm install

    npm install
    
    Run Code Online (Sandbox Code Playgroud)


Lit*_*Zha 8

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

解释:

在 npm 版本 3 到 6 中,peerDependency 不会自动安装,如果在树中发现对等依赖项的无效版本,则会发出警告。从 npm v7 开始,默认安装peerDependency 。

npm 文档:peerDependency

您的依赖项包含一些与根项目的依赖项冲突的对等依赖项。

正如日志中所描述的那样npm ERR


mak*_*asi 8

首先要了解问题。这是我的错误:

npm ERR! ERESOLVE unable to resolve dependency tree
npm ERR! 
npm ERR! While resolving: project-admin@11.0.0
npm ERR! Found: @angular/common@11.0.3
npm ERR! node_modules/@angular/common
npm ERR!   @angular/common@"11.0.3" from the root project
npm ERR! 
npm ERR! Could not resolve dependency:
npm ERR! peer @angular/common@"^9.1.0 || ^10.0.0" from @agm/core@3.0.0-beta.0
npm ERR! node_modules/@agm/core
npm ERR!   @agm/core@"3.0.0-beta.0" from the root project
Run Code Online (Sandbox Code Playgroud)

首先,您应该开始从下到上阅读问题。这里@agm/core@3.0.0-beta.0 需要 angular common 9.1.0 或 10.0.0。顶部消息说找到的 angular common 实际上是 11.0.3。

(如果你想更好地理解依赖关系,这里是一个非常简单的站点https://npm.github.io/how-npm-works-docs/npm3/how-npm3-works.html

dependencies — these are the essential dependencies that you rely on and call in your project’s code
devDependencies — these are your development dependencies, for example, a prettier library for formatting code
peerDependencies — if you set a peer dependency in your package.json, you are telling the person who installs your package that they need that dependency with the specified version
optionalDependencies — these dependencies are optional and failing to install them will not break the installation process
bundledDependencies — it’s an array of packages that will come bundled with your package. This is useful when some 3rd party library is not on NPM, or you want to include some of your projects as modules
Run Code Online (Sandbox Code Playgroud)

那么应该怎么解决呢?问题在于对等依赖。解决方案是降级 angular common 或者解决方案是使用遗留依赖关系逻辑来使用 --legacy-peer-deps 安装包。所以 --legacy-peer-deps 所做的不是尝试自动安装 peerDependencies。这对你有用吗?大概是。但是您应该提供具体的说明如何做到这一点,或者使用 --legacy-peer-deps 自动使用来自上述答案之一的此代码的项目包的未来安装:

npm config set legacy-peer-deps true
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我安装了该软件包并尝试运行 ng serve,但由于使用了 --legacy-peer-deps,因此未安装依赖软件包。我必须手动安装它们(因为我没有从上面的代码中设置配置)。最后手动安装了大约 5 个包,全部使用 --legacy-peer-deps,我结束了一个无法安装的包,我没有尝试继续,因为我的项目疯狂地抛出警告,并且有很多也用于审计的软件包。所以我的决定是不使用这个包并寻找替代方案。

我一路上读到的其他解决方案:

  • 将节点降级到 v14,这将降级 npm。可能不是 v14,但这是降级最多的版本。
  • 有些人使用yarn来强制安装包——我个人不明白这是如何工作的,因为我没有使用过yarn。
  • 将 angular 和全局 angular cli 版本降级到满足要求的版本。在我的情况下,它是角度/常见的,在问题中它是角度/核心,但两者都需要将整个角度降级(这里不确定)。
  • 您安装的软件包可能具有不需要降级 angular 的更高版本。您可能会尝试使用https://updatepackagejson.com/将您的软件包升级到最新版本,但这是为了防止您的项目很新。

  • 这是最好的答案,因为它是解释来自OP的错误日志的唯一答案,而不是愚蠢地应用强制或legacy-peer-deps选项。最好坚持使用 npm 6,而不是推送 npm 7 并在其上强制/legacy-peer-deps,以避免修复依赖项问题 (27认同)
  • 到目前为止,最好的答案是,其他人只是解决问题,但不关心根本问题,也不就问题发生的原因提供有见地的建议。 (4认同)

Eli*_*lin 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. @angular/http从你的中删除package.json(在 Angular 9 中不需要它)

  2. 确保您@angular/commonpackage.json.

  3. 跑步npm i

如果您运行的是 Angular 7,请打开 package.json 并检查以确保所有 Angular 包不高于 ^7.0.0。您可能还需要删除 gf-kautomata-pipeline-ui,或者联系 gf-kautomata-pipeline-ui 的作者并查明该库是否与 Angular 7 兼容。


归档时间:

查看次数:

276176 次

最近记录:

4 年 前