把 WhatsApp Business API 接入您的网站
Cloud API 对比点击即聊链接、消息模板、授权同意、24小时窗口和人工接手,写给正在把 WhatsApp 接入网站的阿联酋企业。
阅读文章网站服务
AngularJS 的官方支持已于 2022 年 1 月结束。这在实际中意味着什么、一次 AngularJS 迁移通常会出现哪些问题、如何分阶段迁移而不是一次性完成,以及如何测试迁移结果。

根据 AngularJS 官方文档,AngularJS 的官方支持已于 2022 年 1 月结束,这意味着仍在运行 AngularJS 应用的企业,已无法再为该框架本身获得任何官方安全补丁。迪拜AngularJS迁移的现实做法,是有计划、通常分阶段地迁移到现代 Angular,而不是忽视这一风险,也不是在任何新功能上线前先完成一次彻底重写。真正会出问题的地方,往往是双向数据绑定、自定义指令和依赖注入的配置,而不是简单的语法差异。
本文将说明 AngularJS 停止支持究竟意味着什么、在迁移到现代 Angular 时通常会出现哪些问题、如何分阶段迁移而不是一次性大规模重写,以及在结果交付给用户之前应如何正确测试。
要点速览
AngularJS 官方的版本支持状态页面明确指出,AngularJS 的支持已于 2022 年 1 月结束,此前 Angular 团队已为主要用户设置过一段延长支持期。停止支持意味着不会再有任何错误修复、任何安全补丁,也不会再有框架团队的持续维护,而这款软件恰恰运行在面向浏览器用户的应用中,直接接触该应用所处理的各类数据。
这与一个框架单纯变老不同。一个不再受支持的框架,并不会在支持结束当天就停止运作,这正是这一风险容易被低估的原因。AngularJS 代码会照常运行,直到 AngularJS 本身或其某个已无人维护的第三方依赖被发现存在漏洞,届时将不会有官方补丁可用,企业只能在承担风险和自行修补之间做出选择。
本文以一般性方式介绍 AngularJS 官方公布的支持政策,不构成法律或合规建议。如果您的 AngularJS 应用处理受监管的个人数据,请与合格顾问一起,结合您的具体义务,权衡继续使用不受支持版本所带来的安全风险。
这一命名确实容易让人混淆。AngularJS,有时也称为 Angular 1,是一个围绕双向数据绑定及其自有依赖注入系统构建的 JavaScript 框架。Angular,从 2 版本开始,则是一次彻底重写:架构不同,按惯例使用 TypeScript 而非纯 JavaScript,其组件模型也无法与 AngularJS 的控制器和指令一一对应。两者之间没有自动升级路径,这正是为什么在两者之间转换被恰当地称为迁移,而不是升级。
这一点对规划很重要,因为它排除了简单地提升版本号这一便捷答案。一次 AngularJS 迁移,在范围上更接近于把应用移植到一个新框架,而不是一次常规的依赖升级,从一开始就应该按这个标准来评估范围和预算。
AngularJS 与 Angular 只是名字相似,其余几乎没有共同之处。请把这次转换当作一次迁移来规划,而不是一次升级。
有三个方面始终占据了大部分实际工作量。双向数据绑定,是 AngularJS 整个模型所围绕构建的核心模式,必须用 Angular 自身的绑定语法和变更检测机制重新表达,这是对该逻辑的真正重写,而不是简单的查找替换。自定义的 AngularJS 指令,尤其是带有复杂链接函数或大量 DOM 操作的指令,通常需要针对一套不同的 API 从零开始重写为 Angular 组件或指令。依赖注入的配置在两个框架之间差异足够大,以至于在 AngularJS 中以某种方式注册的服务,需要为 Angular 的注入器重新注册,并且往往需要重新组织结构。
第四个容易被忽视的方面,是没有可维护的 Angular 替代版本的第三方 AngularJS 库。在项目早期就核查应用依赖了哪些外部库,以及每一个库是否有受支持的 Angular 替代方案,能避免在迁移进行到一半时才发现障碍,而不是在最初的范围评估阶段就发现。
彻底重写,即在整个应用用 Angular 重建完成之前冻结所有新功能,对于超出小型应用规模的项目来说,很少是正确的选择,因为这会让企业在整个项目周期内无法发布其他任何内容,并把全部迁移风险集中在一次发布中。Angular 自身的工具支持一种混合方案,让 AngularJS 和 Angular 的组件在同一个应用中同时运行,通过一个兼容层相互通信,这样应用的各个部分就可以逐一迁移。
一种切实可行的顺序是,先迁移相对独立、风险较低的页面来验证方案是否可行,再转向 AngularJS 特有逻辑最集中的部分,例如复杂指令和共享服务,此时团队已经形成了稳定的工作节奏。共享服务和路由通常值得尽早迁移,即便风险更高,因为把它们留在 AngularJS 中的时间越长,每一个新迁移完成的页面底层仍然要与旧的、不受支持的代码通信。
列出每一个自定义指令、服务和第三方依赖项,在确定时间表之前,标记出哪些没有可维护的 Angular 替代方案。
让 AngularJS 和 Angular 在同一个构建中并行运行,使应用中已迁移和尚未迁移的部分能够在项目期间共存。
先迁移较简单、相对独立的页面来验证方案,再逐步处理共享服务和最复杂的自定义指令。
在将 AngularJS 从构建中彻底移除之前,先确认没有任何路由、服务或组件仍在调用它,从而彻底消除不受支持代码带来的风险。
一个迁移后的页面即便外观与原版完全一致,底层行为也可能不同,因为即使标记没有变化,变更检测和数据绑定模型也已经改变。针对现有 AngularJS 行为编写的自动化测试,再针对同一页面迁移后的 Angular 版本重新运行一遍,比单纯依靠人工点击测试更可靠地发现这类回归问题,对表单校验、条件显示逻辑,以及任何由用户权限驱动的内容尤其如此。
如果现有的 AngularJS 应用几乎没有自动化测试覆盖,那么在迁移某个部分之前,先针对其当前行为编写测试,是值得投入的额外时间,因为这能把是否仍然可用变成一个有明确答案的问题,而不是在截止日期压力下凭经验判断。
第一个错误,是把这次迁移当作可以推迟到淡季再做的可选维护工作。由于一个不受支持的 AngularJS 应用不会在支持结束当天就明显出问题,迪拜企业很容易一再把这项工作往后排,直到某个安全问题在远比有计划迁移更糟糕的条件下,迫使企业做出决定。
第二个错误,是在没有先审核现有应用的指令、服务和第三方依赖的情况下,就直接决定进行彻底重写,这往往会导致时间表建立在猜测之上,而不是基于实际工作量。在任何迁移工作开始之前先做一次简短审核,相比预算最终出现巨大偏差,成本要小得多。
第三个错误,是以迁移后的页面看起来与之前相同为由跳过测试。由于 AngularJS 和 Angular 在底层处理变更检测和数据绑定的方式不同,一个看起来没有变化的页面,仍可能在边缘情况下出现不同行为,尤其是在表单校验和条件逻辑方面,而这正是自动化测试擅长在用户发现之前捕捉到的问题。
我们的Angular 开发服务专门涵盖 AngularJS 迁移项目,从对现有应用的初步审核,到分阶段的混合迁移,直至完全采用现代 Angular 构建。迁移完成后,我们的网站维护方案会持续让应用保持在受支持的依赖版本上,而不是让它重新回到不受支持的状态。
如果您仍在犹豫是原地迁移还是彻底重建,我们关于如何为阿联酋企业选择 CMS的指南,以及迪拜企业网站上线检查清单一文,都值得与本文一并阅读。
直接解答
不再受支持。AngularJS 官方文档指出,在此前的延长支持期结束后,AngularJS 的官方支持已于 2022 年 1 月正式终止。此后不会再发布任何官方安全补丁,因此仍在运行 AngularJS 的企业,其面向浏览器的应用中运行的正是未打补丁、不受支持的代码。
不是,尽管名字相似。AngularJS,有时也称为 Angular 1,与 Angular(2 版本及以上)是两个独立的框架,架构不同,按惯例使用的语言也不同,一个是 JavaScript,另一个是 TypeScript,两者之间没有直接的升级路径。在两者之间转换是一次真正的迁移,而不是一次版本更新。
通常可以逐步迁移,而且这通常也是更好的选择。Angular 自身的混合工具允许 AngularJS 和现代 Angular 在分阶段迁移过程中于同一应用内并行运行,因此各项功能可以逐步转移,而不必在任何内容上线之前先重建整个应用。
双向数据绑定模式、自定义 AngularJS 指令和依赖注入配置,是最常需要真正投入工作量的部分,因为底层概念发生了变化,而不仅仅是语法不同。没有现代替代方案的第三方 AngularJS 库,也是另一个值得尽早核查的常见障碍。
主要风险在于 AngularJS 本身或其某个未维护依赖项中被发现安全漏洞,而届时没有官方补丁可用。对于处理任何个人数据的面向客户应用而言,这一风险会随着迁移被拖延的时间越长而不断增加,而不是保持不变。
这完全取决于现有应用的规模和复杂程度、测试覆盖率,以及它依赖了多少自定义指令和服务。针对实际代码库进行一次正式的范围评估,比一个笼统的估计更可靠。
资料来源
书面固定价格
已收到,我们正在为您撰写报价。
工作时间内您将在 45 分钟内收到。请查收确认邮件。
继续阅读