很多人看到 Angular 从2.4.x 版本之后直接跳到了Angular 4.0.0 beta 版本,为什么没有 Angular 3.x 呢?

先说一下 Angular 4 将于 2017年3月 发布. (/≧▽≦)/

原因很简单

原因并没有你想的那么复杂,一句话就能描述:
__Angular开始使用semver语义化版本,并做了一次版本对齐__.

早在去年9月. Angular 团队就宣布将使用 Semantic Versioning 也就是SEMVER.

语义化版本就像它的名字所说的一样,让每一个版本号的添加都有其意义. 这可以让开发人员迅速明白此次升级的变动情况,而且可以让第三方工具比如 NPM 可以更便捷更安全的进行操作.

一个语义版本包括三个数字:

主版本号 次版本号 修订号
破坏性变更 功能添加,无破坏性变更 Bug修正,无破坏性变更

版本号递增规则如下:

  1. 主版本号:当你做了不兼容的 API 修改,

  2. 次版本号:当你做了向下兼容的功能性新增,

  3. 修订号:当你做了向下兼容的问题修正.

先行版本号及版本编译信息可以加到“主版本号.次版本号.修订号”的后面,作为延伸.

SEMVER 详细文档可以参照此链接

那么这对Angular团队意味着什么呢? 就像每个不断发展的软件一样,总会发生一些破坏性的改变. 例如,现有应用程序报出了一个编译器错误,这些错误在以前的编译器版本中未被注意到,无论怎样这些错误将会在升级时破坏现有Angular应用程序,这都需要团队变更主版本号.

就像以前 Igor Minar 说的,即使只是将 Angular 的 TypeScript 依赖 从 v1.8 升级到 v2.1 或者 v2.2 然后编译 Angular 也会在技术上导致突破性的变化. 所以他们非常重视SEMVER.

破坏性的改变并不一定是痛苦的

一直追随Angular社区的人,绝对知道我在说什么.我们从Angular 1升级到angular 2时,绝对是一个彻底的改变,包含新的API和新的模式. 显而易见的是:最终Angular 2是一个完全的重写,即使有可用的升级选项.

而从版本2更改为版本4或5的改变将不会像从Angular 1那样. 它不会是一个完全的重写,它将只是一些核心库的更改,需要一个主要的SEMVER版本更改. 此外,将有适当的调整阶段,以允许开发人员调整其代码.

现在Google内部,Angular团队使用一个工具来处理自动升级,甚至包括破坏性变更. 不过这仍然需要更详细的计划和调整,但团队正在努力使这个工具具有更好的可用性,目前看最有可能的情况是在2017年为angular 5释放出来.

Angular 就是 Angular

有人可能已经猜到了,"Angular 2" 也是一种阶段性称谓.总有一天,比如到了版本 4 或者 _5_,这种称谓将被废弃,我们将会开始只称呼它为 "Angular" 不带版本后缀.

同时,我们现在应该开始尽量避免使用 ng2-angular2- 作为前缀的 GitHub/NPM库.

称谓说明

基本上从现在开始,命名所有版本的Angular简单地叫做“Angular”. 尽量避免使用版本号,除非真的有必要消除歧义.

比如:

  • 默认使用“Angular”(“我是一个Angular开发者”,“这是一个Angular的聚会”,“Angular生态系统正在快速增长”)

  • “Angular 1”,“Angular 2”,“Angular 4”当谈到一个特定的发布版本时(例如,当谈到一个新引入的特性 - “这是一个介绍X特性X,介绍在Angular 4”从Angular 1到Angular 2“,”我为Angular 5提出这个更改“)

  • 在报告错误时使用完整的semver版本(“此问题自Angular 2.3.1开始存在”)

所有文档(甚至包括Angular 1),将在未来几周内从AngularJS中删除“JS”.

在博客文章,课程,书籍中,或者当你定位一个非常特定的版本的Angular时,考虑添加一个标题行:

"这篇文章使用Angular v2.3.1"

这有助于避免别人感到困惑,特别是在撰写特定API时.

为什么没有 Angular 3 版本

核心Angular库存在于一个单一的GitHub存储库中,位于github.com/angular/angular. 所有这些都以相同的方式进行版本化,但作为不同的NPM包分发:

包名 版本
@angular/core v2.3.0
@angular/compiler v2.3.0
@angular/compiler-cli v2.3.0
@angular/http v2.3.0
@angular/router v3.3.0

可以看到 @angular/router 的版本的当前未对齐. 由于router包版本的这种不对齐,并且已经造成了一定的使用混乱. Angular 团队决定直接使用Angular v4. 采用这种方式,将所有的核心包对齐,这将更容易维护并且帮助避免将来的混乱.

为什么router 已经到了 v3.x.x?这是Angular团队发布 router v3 时的官方公告.

此外,重要的是要了解Angular如何在Google中使用和集成(Igor在这里的主题演讲中谈到这一点). 所有Google应用程序使用Angular版本等于当前GitHub的Angular仓库的主分支. 每当一个新的提交到达master,它将被整合到谷歌独立而庞大的mono-repo,其中还有其他产品,如地图,Adsense等. 因此,在Google内部使用Angular的所有项目套件都将针对此新版本运行其广泛的测试. 这使得团队非常有信心去裁剪一个新版本,因为它将包含已经在Google中进行过测试的Angular软件包的完全组合版本. 因此,具有对齐的版本是完全有道理的,并且随着时间的推移更容易维护它们,这反过来有助于团队在发布新特征方面更有成效.

暂定释放时间表

Angular 团队基于时间周期的发布策略,发生在三个周期:

  • 补丁每周发布.

  • 主要版本发布之后每月3次次要版本发布.

  • 主要版本,每6个月更换一次,易于迁移.

2017年开始之后接下来的3个月将专心完成 Angular 4.0.0.

总结

其实相关的也就那么几点:

  • 不管是 Angular 的版本或者其他框架或包的版本,我们都没有必要过度纠结. 了解版本发布规则和 CHANGELOG 即可.

  • 每次破坏性变更或者不兼容的升级,虽然会带来一时的痛苦,但是更多的是更强大的功能和性能,应该尽量向好的一面去看.

  • 敢于尝鲜是好事,但是某些尝鲜用在生产环境中,可能带来更多的是痛苦. 抖 M 属性的请无视此条d(・∀・*)♪゚

为何 Angular 4 是 Angular 2 的下一个版本, 为什么没有 Angular 3.x的更多相关文章

  1. H5混合开发app如何升级的方法

    本篇文章主要介绍了H5混合开发app如何升级的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. ios – 比较两个版本号

    如何比较两个版本号字符串?例如:3.1.1和3.1.2.5.4现在我需要找出3.1.2.5.4是否高于3.1.1但我不知道如何做到这一点.有谁能够帮我?

  3. iOS App版本编号

    iTunesConnect开发人员指南PDF(第47页),关于iOS应用程序的版本号,请参阅以下内容:Usetypicalsoftwareversioningconventions(suchas“1.0″or“1.0.1”or“1.1”)没有关于应用版本号的确切格式的声明.我们可以使用版本号,例如“1.0.0.1”或“1.0.0.0.1”吗?解决方法我的建议是坚持使用1.x.x格式作为应用商店用途

  4. swift获取屏幕的宽高

    之前写了一篇关于获取iphone屏幕宽高的方法,算是能解决ios7下的一个小bug,是用OC写的,文章地址:http://blog.csdn.net/wingsofpiano/article/details/45726729这次用swift语言试着写了一个相同的方法,同样,粘贴到viewcontroller就能用使用示例:如果有什么错误的地方还望各位前辈能指出来

  5. swift中获取判断设备版本的方法

    1.直接获取,按需要加if判断即可2.获取每一位的版本号,利用switch进行判断3.获取版本号后,定义一个返回比较结果的对象进行比较

  6. Swift获取APP版本号,提示用户升级

    获取当前版本号获取历史的版本号??

  7. swift 获取app版本号及 ios 版本号

    =infoDictionary!["CFBundledisplayName"]letmajorVersion:AnyObject?=infoDictionary!["CFBundleShortVersionString"]letminorVersion:AnyObject?=infoDictionary!

  8. Swift开发:Info.plist文件的常见配置

    如果使用文本编辑器打开这个文件,会发现这是一个XML格式的文本文件,使用Xcode的OpenAs->SourceCode或者PropertyList可以进行编辑,本文会重点介绍一些在iOS开发中常见的的Info.plist的配置项。Info.plist配置项说明1、设置启动图标2、设置启动闪屏图片3、设置版本号相关设置Bundle的版本号。

  9. 版本化我自己的Android库

    我目前正在为Android开发自定义库.我的想法是为应用程序创建一个版本,以及该库的不同版本.如果没有将两个build.gradle文件合并在一起,是否有最佳实践?您的输出文件将具有您在gradle.proprties文件中指定的版本号的名称.注意事项这将以非常静态的方式对您的库和/或API进行版本控制.这意味着开发人员无法通过方法调用动态获取版本号.一定要有一个方法可以为客户端开发人员提供版本号,并确保两者保持同步.只有这样你才能拥有一个正确版本的库.

  10. Android Studio是否支持用于Android UI设计的AngularJS?

    我对AndroidStudio有疑问:AS在设计XML文件时是否支持AngularJS代码,例如:对于小动画或效果?

随机推荐

  1. Angular2 innerHtml删除样式

    我正在使用innerHtml并在我的cms中设置html,响应似乎没问题,如果我这样打印:{{poi.content}}它给了我正确的内容:``但是当我使用[innerHtml]=“poi.content”时,它会给我这个html:当我使用[innerHtml]时,有谁知道为什么它会剥离我的样式Angular2清理动态添加的HTML,样式,……

  2. 为Angular根组件/模块指定@Input()参数

    我有3个根组件,由根AppModule引导.你如何为其中一个组件指定@input()参数?也不由AppModalComponent获取:它是未定义的.据我所知,你不能将@input()传递给bootstraped组件.但您可以使用其他方法来做到这一点–将值作为属性传递.index.html:app.component.ts:

  3. angular-ui-bootstrap – 如何为angular ui-bootstrap tabs指令指定href参数

    我正在使用角度ui-bootstrap库,但我不知道如何为每个选项卡指定自定义href.在角度ui-bootstrap文档中,指定了一个可选参数select(),但我不知道如何使用它来自定义每个选项卡的链接另一种重新定义问题的方法是如何使用带有角度ui-bootstrap选项卡的路由我希望现在还不算太晚,但我今天遇到了同样的问题.你可以通过以下方式实现:1)在控制器中定义选项卡href:2)声明一个函数来改变控制器中的散列:3)使用以下标记:我不确定这是否是最好的方法,我很乐意听取别人的意见.

  4. 离子框架 – 标签内部的ng-click不起作用

    >为什么标签标签内的按钮不起作用?>但是标签外的按钮(登陆)工作正常,为什么?>请帮我解决这个问题.我需要在点击时做出回复按钮workingdemo解决方案就是不要为物品使用标签.而只是使用divHTML

  5. Angular 2:将值传递给路由数据解析

    我正在尝试编写一个DataResolver服务,允许Angular2路由器在初始化组件之前预加载数据.解析器需要调用不同的API端点来获取适合于正在加载的路由的数据.我正在构建一个通用解析器,而不是为我的许多组件中的每个组件设置一个解析器.因此,我想在路由定义中传递指向正确端点的自定义输入.例如,考虑以下路线:app.routes.ts在第一个实例中,解析器需要调用/path/to/resourc

  6. angularjs – 解释ngModel管道,解析器,格式化程序,viewChangeListeners和$watchers的顺序

    换句话说:如果在模型更新之前触发了“ng-change”,我可以理解,但是我很难理解在更新模型之后以及在完成填充更改之前触发函数绑定属性.如果您读到这里:祝贺并感谢您的耐心等待!

  7. 角度5模板形式检测形式有效性状态的变化

    为了拥有一个可以监听其包含的表单的有效性状态的变化的组件并执行某些组件的方法,是reactiveforms的方法吗?

  8. Angular 2 CSV文件下载

    我在springboot应用程序中有我的后端,从那里我返回一个.csv文件WheniamhittingtheURLinbrowsercsvfileisgettingdownloaded.现在我试图从我的角度2应用程序中点击此URL,代码是这样的:零件:服务:我正在下载文件,但它像ActuallyitshouldbeBook.csv请指导我缺少的东西.有一种解决方法,但您需要创建一个页面上的元

  9. angularjs – Angular UI-Grid:过滤后如何获取总项数

    提前致谢:)你应该避免使用jQuery并与API进行交互.首先需要在网格创建事件中保存对API的引用.您应该已经知道总行数.您可以使用以下命令获取可见/已过滤行数:要么您可以使用以下命令获取所选行的数量:

  10. angularjs – 迁移gulp进程以包含typescript

    或者我应该使用tsc作为我的主要构建工具,让它解决依赖关系,创建映射文件并制作捆绑包?

返回
顶部