关于是否期望我创建的库被运行未来版本的Angular的应用使用,我得到了不同的信号。
一方面,他们文档中的这一页说是的:
但另一方面,当我使用Angular CLI生成一个新库时,它会搭建一个新的发布库时可以使用两种发行格式:Partial-Ivy(推荐)包含可移植的代码,可以被用任何版本的Angular构建的Ivy应用使用.
…
用于构建应用程序的Angular版本应该总是相同的或更大的
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的主要更新中,几乎没有那么多的代码破坏变化。
概要:
- 主要版本号意味着可能发生破坏性更改。所以不要假设你的库可以支持还不存在的主要版本号。
- 对于任何版本的Angular 12+,你的应用都可以通过Partial-Ivy发布(但这并不意味着它可以编译/构建/工作)。