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

Unable to resolve dependency tree error when installing npm packages

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

我已尝试重新安装 Node.js 软件包并使用以下方法将代理设置为关闭:

set HTTP_PROXY=
set HTTPS_PROXY=

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

更新:

当我运行以下命令时:

npm install --legacy-peer-deps

显示以下错误:

这与 HTTP 代理无关。

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

根据OP的更新进行更新:

如您所见,它引发了以下错误:

No matching version found for @angular/http@^9.1.4.

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

当使用 npm 7 时,这种情况经常出现,因为对等依赖性问题在版本 7 中被视为错误,而在版本 6 中它们通常只是警告。通常使用 --legacy-peer-deps 可以使其正常工作npm 7.

如果这不起作用,一个选项是降级到 npm 6。降级 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.

问题似乎是 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.

兼容

尝试删除 node modulespackage-lock.json 文件以及 运行 命令 npm install 要么 尝试 npm cache clean --force

试试这个命令-

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

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

npm config set legacy-peer-deps true

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

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

npm i --legacy-peer-deps

此处描述legacy-peer-deps

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.
...

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

npm config set legacy-peer-deps true

或者等待这些包更新。

我终于找到了解决办法:

  • 安装 nvm
  • 使用nvm安装Node.js
  • 输入cmd使用LTS版本
  • 在那之后,我的安装成功了。它应该也适合你。
npm audit fix --force

为我工作

只做简单的事:

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

我刚刚更新了我的 Node.js,它对我有用:

node -v

输出:

V xxxx

并且:

sudo npm install -g n

(使用此命令安装稳定节点版本。)

sudo n stable

这是解决方案。

转到项目目录并执行:

sudo rm ./package-lock.json
sudo npm install --force

就我而言,我在将 npm 从版本 6 升级到版本 7 后开始出现错误(如下)。

npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree

...

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

在我的例子中,使用 --legacy-peer-deps--force 标志进行编译导致了一个无用的包。

所以我尝试使用 yarn install 删除 node_modulespackage-lock.json 和捆绑包。这生成了一个 yarn.lock 文件并创建了 package-lock.json,它在随后的 npm 运行中运行良好。

P.S.: 我正在使用临时解决方法,直到 npm 7 对我的项目正常工作:之后,我将删除 yarn.lock, package-lock.json and folder node_modules, 用npm[=20=重新编译]

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
  1. 如果您的根目录中有 node_modules 文件夹和 package-lock.json 文件,请删除它们:

    rm -r node_modules
    rm package-lock.json
    
  2. 然后 运行 命令:

    npm install --save --legacy-peer-deps
    npm audit fix --force
    
  3. 在根目录中创建.env文件并粘贴以下代码:

    SKIP_PREFLIGHT_CHECK=true
    
  4. 现在,开始你的项目:

    npm start
    

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

解释:

In npm versions 3 through 6, peerDependencies were not automatically installed, and would raise a warning if an invalid version of the peer dependency was found in the tree. As of npm v7, peerDependencies are installed by default.

npm docs: peerDependencies

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

npm ERR 日志中所述。

  1. 在文件中添加依赖package.json
  2. npm install

仍然看到错误?然后

npm install --force`

None 之前的答案对我有帮助。

对我来说,使用 npm i -g npm 将 npm 更新到最新版本(从 7.8 到 7.11.1)解决了我的问题。

我遇到了同样的问题

npm install --legacy-peer-deps

这对我也适用。但我有一个更简单的答案。只需在所需的 package.json 文件中更改它的版本号即可。然后使用

npm i

这将解决您的问题(像往常一样生成一个新项目,没有任何可能破坏的依赖关系问题)。

重置 package-lock.json 一直对我有用:

git checkout -- package-lock.json

详情: 在更新遗留项目的所有包时经常遇到这种情况 - 我强烈不建议使用 npm audit fixnpm i --force。删除 package-lock.json 也不是一直对我有用。回滚到 package.json + package-lock.json 的工作版本并添加软件包对我来说是最安全和最快的变体。

第一次尝试

npm install

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

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

它解决了我的问题。

在我的例子中,我遇到了 @babel/core 依赖的问题,但我不想使用 --force,因为我不是确定后果,所以我去了 https://www.npmjs.com/,寻找软件包并将我的旧版本替换为最新版本。成功了。

我通过将 Node.js 的版本从最新版本降低到 LTS 版本解决了这个问题。

先从 npm i --legacy-peer-deps 标志开始,然后再使用 --force 标志。

以防万一,我确实有过类似的行为,当我尝试 npm upgrade 我当前的 Angular 11.x 基于以前 ng new 的样板文件或创建新的 ng new abc 基于 Angular 12.x。我只是忘了升级 Angular CLI。所以这个 npm install -g @angular/cli@latest 解决了我在 ng new abc.

期间的错误

对于那些在安装 Bootstrap Paginator 或 table next

时出现错误的用户
npm install react-bootstrap-table2-paginator --save

npm install react-bootstrap-table-next --save

解决方法: 在命令后添加 --legacy-peer-deps like

  • npm install react-bootstrap-table2-paginator --save --legacy-peer-deps
  • npm install react-bootstrap-table-next --save --legacy-peer-deps

这个问题我遇到过很多次了。最后我找到了解决办法:

npm install react-native-paper  --legacy-peer-deps

首先要明白问题所在。这是我的错误:

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

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

(如果你想更好地理解依赖关系,这里是非常简单的站点:How npm3 Works

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

那么应该怎么解决呢?问题在于对等依赖性。解决方法是降级angularcommonor 解决方案是使用遗留依赖逻辑使用 --legacy-peer-deps 安装包。所以 --legacy-peer-deps 不会尝试自动安装 peerDependencies。这对你有用吗?可能是。但是你应该添加具体的说明如何做到这一点,或者使用 --legacy-peer-deps 自动使用以前的代码之一安装项目包答案:

npm config set legacy-peer-deps true

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

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

  • 降级 Node.js 到 v14。这将降级 npm。它可能不是 v14,但这是降级最多的版本。
  • 有些人使用 Yarn 来强制安装包 - 我个人不明白这是如何工作的,因为我没有使用过 Yarn。
  • 正在将 Angular 和全局 Angular CLI 版本降级到满足要求的版本。在我的例子中是angular/common,在问题中是angular/core,但两者都需要降级整个angular 对(我在这里不确定)。
  • 您安装的软件包可能有不需要降级的更高版本 Angular。您可能会尝试使用 https://updatepackagejson.com/ 将您的软件包升级到最新版本,但这是为了防止您的项目很新。

即使在 uninstall/install NPM 和 CLI 之后,如果仍然无法正常工作,请确保您在项目文件夹中。例如,您创建了一个根文件夹“myapplication”。现在,您可以使用 运行 CLI 命令在 myapplication 文件夹下创建一个全新的应用程序。在执行 运行 命令后,您会收到类似“ERESOLVE 无法解析依赖树 ” 的错误。因此,不要在 myapplication 文件夹上使用 运行 命令,而是转到 myapplication 文件夹和 run/execute angular 应用程序中的新应用程序文件夹。它会很好用。

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

解决方法: 使用命令 --force.

您的命令将类似于 npm install --force @your-npm-package

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

Yarn 有一个功能可以解决这个问题。如果可以,请尝试使用它来安装包。

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

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

npm error found types/react@16.14.20

因此可能需要根据您的 package.json

安装包版本

npm@7版本报错,无法安装node模块。 如果你将 将 npm 版本 降级到 6,这些问题将变成警告,问题将得到解决。

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

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

  • 删除并安装 node_modules 软件包:

    a) 删除 rm -rf node_modules

    b) 安装:npm i

尝试 2 个选项来解决此问题 选项 1 => 在 运行
之后删除 node_modules 和 package_lock.json npm cache clean --force 在 npm i --force 之后 选项 2 => 运行 npm install --save --legacy-peer-deps

终于,我找到了答案。试试这个命令 -

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

这里有描述legacy-peer-deps

ERESOLVE unable to resolve dependency tree error 然后在任何依赖安装的最后添加 --legacy-peer-deps

喜欢:我正在安装 socket.io 所以,我在最后添加 --legacy-peer-deps

$ npm install @nestjs/platform-socket.io @types/socket.io --legacy-peer-deps

这是节点版本的问题 某些最新版本的节点可能会显示此类错误。

https://github.com/nvm-sh/nvm 我使用 NVM 来管理系统上的节点版本 并使用节点 12 来克服这个错误

更改版本的命令

nvm use 12

这对我有用 npm install --save --legacy-peer-deps

只需执行 2 个简单步骤:

首先,在您的终端中执行此命令。

npm config set legacy-peer-deps true

二、清除缓存

npm cache clean --force

最后,执行你的命令,这肯定有效。

npm 安装--legacy-peer-deps

这对我有用

https://i.stack.imgur.com/6uz7m.png npm install --save --legacy-peer-deps

对于这种情况: 我遇到了这个问题:ERESOLVE 无法解析依赖关系树 在一个 angular 13 项目中,该项目使用了一些来自 azure devops 中私有 npm 提要的包。

为了访问这个存储库,我创建了一个 .npmrc 文件。因此,npm install 命令将搜索我的私有存储库中的所有包,而不再是 npm feed。 无法解析依赖关系树 错误的发生是因为 npm install 命令找不到许多托管在 npm 提要中而不是我的私人提要中的包。

我找到了this amazing answer on how to scope packages

在此基础上我做了一些修改:

  1. 在我的图书馆 Package.json 中,更新名称以具有作用域名称 @mylib
"name": "@myLib/command-queue",
  1. 构建此包并将其发布到我的私人提要
  2. 在我的客户端应用程序(使用此包的应用程序)中,更新 .npmrc 文件以仅将我的私人提要用于此范围内的包
@myLib:registry=https://pkgs.dev.azure.com/...
always-auth=true

现在,每当我 运行 命令 npm install,如果包有 @myLib 范围,它会在我的私人提要中寻找它,并使用所有其他情况的 npm 提要(即 @angular/...)

这是我的客户端应用程序示例 Package.json

    "@angular/platform-browser-dynamic": "~13.3.0",
    "@angular/router": "~13.3.0",        <-- this comes from npm
    "@myLib/jcg-command-queue": "^2.2.0", <-- This comes from my private feed

此外,通过此更改,不再需要将 --legacy-peer-deps 添加到 npm install 命令中。