尝试通过 ng 更新升级到 Angular Material 8 时得到 @angular/* 版本 ~9.0.0-next-0。为什么会有这种差异?

Got @angular/* version ~9.0.0-next-0 when tried to upgrade to Angular Material 8 via ng update. Why this discrepancy?

我正在尝试使用 here 中的说明将 Angular 7 应用程序升级到 Angular 8。一切顺利,直到最后一步:

ng update @angular/material

这更新了 Angular Material 包到 8.1.2,但也升级了 @angular/* 包到一个相当奇怪的不需要的版本:~9.0.0-next.0

这是有问题的(我不得不摆脱一个非必要的开发依赖,它需要 Angular <= 8),因为我不想超出 version 8 which is the latest stable one

我该如何解决这个问题?

问题是在 运行 之前 ng update @angular/material 您的一些依赖项已经在 8.2.0 上,而 @angular/material 仍在版本 7 上。

ng update @angular/material 显然只检查是否有可用于 @angular/material 的更新——而不是检查它可能在途中更新的其他依赖项。因此,当您启动该命令时,它注意到有可用的更新版本并继续更新。其他依赖项在进行更新之前已更新为版本 8(并且有版本 9 可用)。

这就是为什么您在进行更新之前必须始终注意所有版本是否一致的原因。

还有一个小小的观察:9.0.0-next.0 是在您进行更新前一小时发布的。所以如果你在那之前这样做,你就不会有这些问题。

可能的修复方法是手动编辑 package.json 并将版本 ^9.0.0-next.0 的依赖项更改为 ^8.2.0

社区似乎认为这是一个错误。请参阅:https://github.com/angular/angular-cli/issues/14980(向下滚动)。