如何处理在Angular CLI中安装对等依赖?

94

在尝试更新我的Angular CLI和NPM时,我发现自己陷入了一个几乎无休止的错误循环中。每次更新时,都会出现告诉我安装对等依赖项(见下文)的WARN消息,但每次安装依赖项时,又会出现更多的WARN消息。处理这种情况是否有更好的方法,或者它真的需要花费几个小时吗?

npm WARN @angular/animations@5.2.1 requires a peer of @angular/core@5.2.1 
but none is installed. You must install peer dependencies yourself.
npm WARN @angular/compiler-cli@5.1.0 requires a peer of typescript@>=2.4.2 
<2.6 but none is installed. You must install peer dependencies yourself.
npm WARN @ng-bootstrap/ng-bootstrap@1.0.0-beta.6 requires a peer of 
@angular/core@^4.0.3 but none is installed. You must install peer 
dependencies yourself.
npm WARN @ng-bootstrap/ng-bootstrap@1.0.0-beta.6 requires a peer of 
@angular/common@^4.0.3 but none is installed. You must install peer 
dependencies yourself.
npm WARN @ng-bootstrap/ng-bootstrap@1.0.0-beta.6 requires a peer of 
@angular/forms@^4.0.3 but none is installed. You must install peer 
dependencies yourself.
npm WARN @schematics/angular@0.1.17 requires a peer of @angular-
devkit/core@0.0.29 but none is installed. You must install peer dependencies 
yourself.
npm WARN @schematics/angular@0.1.17 requires a peer of @angular-
devkit/schematics@0.0.52 but none is installed. You must install peer 
dependencies yourself.
npm WARN @schematics/schematics@0.0.11 requires a peer of @angular-
devkit/core@0.0.22 but none is installed. You must install peer dependencies 
yourself.
npm WARN angular2-notifications@0.7.4 requires a peer of 
@angular/core@^4.0.1 but none is installed. You must install peer 
dependencies yourself.
npm WARN angular2-notifications@0.7.4 requires a peer of 
@angular/common@^4.0.1 but none is installed. You must install peer 
dependencies yourself.
npm WARN angular2-notifications@0.7.4 requires a peer of @angular/platform-
browser@^4.0.0 but none is installed. You must install peer dependencies 
yourself.
npm WARN angular2-notifications@0.7.4 requires a peer of 
@angular/animations@^4.0.1 but none is installed. You must install peer 
dependencies yourself.
npm WARN bootstrap@4.0.0-beta.2 requires a peer of jquery@1.9.1 - 3 but none 
is installed. You must install peer dependencies yourself.
npm WARN bootstrap@4.0.0-beta.2 requires a peer of popper.js@^1.12.3 but 
none is installed. You must install peer dependencies yourself.
npm WARN ng2-toasty@4.0.3 requires a peer of @angular/core@^2.4.7 || ^4.0.0 
but none is installed. You must install peer dependencies yourself.
npm WARN ngx-carousel@1.3.5 requires a peer of @angular/core@^2.4.0 || 
^4.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN ngx-carousel@1.3.5 requires a peer of @angular/common@^2.4.0 || 
^4.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN tsickle@0.25.5 requires a peer of typescript@>=2.4.2 <2.6 but none 
is installed. You must install peer dependencies yourself.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.1.3 
(node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for 
fsevents@1.1.3: wanted {"os":"darwin","arch":"any"} (current: 
{"os":"win32","arch":"x64"})

我知道我一定做错了什么,但我还是Angular的新手。

6个回答

95

对于peer dependency warnings,往往可以被忽略。只有当缺失整个peer dependency或者版本高于你所安装的版本时才需要采取行动。

让我们以此警告为例:

npm WARN @angular/animations@5.2.1需要一个依赖等级为@angular/core@5.2.1,但是未安装任何依赖。您必须自己安装相关依赖。

使用Angular时,您希望所有软件包使用的版本保持一致。如果存在不兼容的版本,请更改package.json中的版本,然后运行npm install以使它们同步。我倾向于将Angular版本保持最新,但您需要确保您所需的Angular版本的版本一致(可能不是最新版本)。

在这种情况下:

npm WARN ngx-carousel@1.3.5需要一个依赖等级为@angular/core@^2.4.0 || ^4.0.0,但是未安装任何依赖。 您必须自己安装相关依赖。

如果您正在使用高于4.0.0版本的Angular,则可能不会遇到任何问题。那就没什么可做的了。 如果您使用的Angular版本低于2.4.0,则需要将版本升级。更新package.json,然后运行npm install,或者为您所需的特定版本运行npm install。就像这样:

npm install @angular/core@5.2.3 --save
如果您正在运行 npm 5.0.0 或更高版本,则可以省略 --save ,该版本会自动将软件包保存在 package.json 的依赖项部分中。在这种情况下,您正在运行 Windows,而fsevent需要OSX。此警告可以忽略。

谢谢!我应该在我的package.json中更新"dependencies"和"devDependencies"的版本,还是应该创建一个"peerDependencies"并将这些版本添加到其中? - tommy
我关于不必担心devDependencies的评论是错误的。你也需要更新那个部分的版本号。那个部分的Angular包应该与dependencies部分中的包具有相同的版本。更改那里的版本可能也是必要的。对于任何困惑,我很抱歉! - R. Richards
1
似乎这是计算机的任务,所有信息都在package.json中,我的操作系统也很明显,学习这些并不有趣。有一天人们会说:“我们的祖先为了让我们达到这一点而遭受了很多痛苦”。 - mkb
@R.Richards写道:“如果你正使用高于4.0.0版本的Angular,则很可能不会遇到任何问题。”分析器能否检测到Angular版本高于4.0.0的存在?如果可以,那么为什么要显示这个警告? - chrisinmtown
抱歉我有点迟钝,但我不明白为什么在使用高于4.0.0版本的Angular时会收到警告 @angular/core@^2.4.0 || ^4.0.0 but none is installed …是因为版本不匹配吗? - Yann
如果我们安装了最新的Angular版本,但有一些包出现了警告(我看到有几个库出现了这个错误)。在解决以下依赖关系时: @dashjoin/json-schema-form@0.8.4 找到:@angular/common@13.2.0 无法解决依赖项: 来自@dashjoin/json-schema-form@0.8.4的等级 @angular/common@"~11.2.12" 的同行。 - Amith Dissanayaka

5
当您更新依赖项时,可以使用 Angular cli 中的 --force 标志来忽略同级依赖警告。
ng update @angular/cli @angular/core --force

完整的选项列表请查阅文档:https://angular.io/cli/update


7
如果这个回答包含了对这个方法的快速说明以及为什么它能帮助你解决OP提出的问题,那么我认为这个回答会更有帮助。 - JTech
@JTech 我已经更新了我的答案,感谢您的反馈。 - Wojtek Dmyszewicz
在 clientapp 文件夹中使用 Node.js 命令提示符,它正在工作,非常感谢。 - hosam hemaily
当你使用--force参数来忽略依赖关系时,会不会出现问题呢?是否有一个标志可以自动安装所有所需的依赖关系呢? - undefined

1

更新你的Angular(全局):

  • 通过以下方式进行更新:

ng update @angular/cli @angular/core

  • 或者删除Angular并重新安装它:

npm uninstall -g @angular/cli
npm install -g @angular/cli

之后,如果你想使用旧的Angular项目(本地):

  • 使用npm list测试是否有依赖项已更改并出现此错误:

npm ERR! peer dep missing: mydependencie, required by somecomponent

这意味着你需要更新你的项目:

  • 然后,你可以创建一个新项目,粘贴你的代码并重新安装所有依赖项
  • 或者安装npm list所需的所有依赖项:

npm install mydependencie


0
NPM包库在package.json文件中有一个名为peerDependencies的部分。例如,使用Angular 8构建的库通常会将Angular 8列为依赖项。对于运行低于版本8的任何人来说,这是一个真正的依赖关系。但对于运行版本8、9或10的任何人来说,是否应该追求任何关注是值得怀疑的。
我一直安全地忽略这些Angular更新消息,但我们确实有单元和Cypress测试!

0

我发现在与你的Angular项目相同的目录中运行npm install命令可以消除这些警告。我不知道原因。

具体来说,我正在尝试使用ng2-completer。

$ npm install ng2-completer --save
npm WARN saveError ENOENT: no such file or directory, open 'C:\Work\foo\package.json'
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN enoent ENOENT: no such file or directory, open 'C:\Work\foo\package.json'
npm WARN ng2-completer@3.0.3 requires a peer of @angular/common@>= 6.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN ng2-completer@3.0.3 requires a peer of @angular/core@>= 6.0.0 but noneis installed. You must install peer dependencies yourself.
npm WARN ng2-completer@3.0.3 requires a peer of @angular/forms@>= 6.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN foo No description
npm WARN foo No repository field.
npm WARN foo No README data
npm WARN foo No license field.

我无法编译。 当我再次尝试在我的Angular项目目录中进行编译,该目录位于foo / foo_app中时,它可以正常工作。

cd foo/foo_app
$ npm install ng2-completer --save

0
如上所述,这些警告通常可以忽略。然而,如果在升级过程中存在大量的第三方依赖,这些依赖往往会引起问题,并且需要进行更新。
npm peer是一个非常好的资源,它可以显示各个版本之间的兼容性。只是提醒一下,我在升级过程中遇到了很多这样的情况。

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