Angular库版本控制:我应该相信文档还是相信CLI?



关于是否期望我创建的库被运行未来版本的Angular的应用使用,我得到了不同的信号。

一方面,他们文档中的这一页说是的:

发布库时可以使用两种发行格式:Partial-Ivy(推荐)包含可移植的代码,可以被用任何版本的Angular构建的Ivy应用使用.

用于构建应用程序的Angular版本应该总是相同的或更大的

但另一方面,当我使用Angular CLI生成一个新库时,它会搭建一个新的package.json,它需要相同的主版本。:
{
"peerDependencies": {
"@angular/common": "^14.0.0",
"@angular/core": "^14.0.0"
}
}

如果文档是完全可信的,我希望package.json指定>=14.0.0。我不太愿意相信"向前兼容",所以我更喜欢他们构建事物的方式。但另一方面,文档似乎清楚地(并且大胆地)声明向前兼容性是可以依赖的。

有没有人知道为什么文档说了一件事,而CLI似乎不"信任"?它吗?

CLI不"信任";因为可能会有破坏性的变化这会阻止你的库工作。

的确,你的库可以通过Partial-Ivy在任何版本的Angular 12或更高版本中发布,但这并不意味着发布的库符合Angular未来版本的代码要求。

如果你的库声明了^14.0.0,而将来使用你的库的应用程序想要升级到15.0.0,它总是可以选择使用--force来升级Angular,直到你的库发布了一个肯定能与Angular 15兼容的版本(例如,通过将声明更改为^15.0.0)。如果更新是强制的,而你的库无法处理在第15版中引入的任何破坏性更改,那么应用的构建将会失败(我认为在某些情况下甚至可能在运行时失败)。

在我看来,在Angular 5和6之间进行升级时,最明显的是要小心Angular的主要版本,因为不仅Angular有巨大的、破坏代码的变化,RxJS也有。许多用户不得不等到他们的依赖项更新了代码才能使用Angular 6的特性,然后他们自己才能更新到Angular 6。最近,在Angular的主要更新中,几乎没有那么多的代码破坏变化。

概要:

  1. 主要版本号意味着可能发生破坏性更改。所以不要假设你的库可以支持还不存在的主要版本号。
  2. 对于任何版本的Angular 12+,你的应用都可以通过Partial-Ivy发布(但这并不意味着它可以编译/构建/工作)。

最新更新