首页 > 其他分享 >谈谈 Angular 的升级问题

谈谈 Angular 的升级问题

时间:2023-10-29 16:01:16浏览次数:26  
标签:Node Spartacus js 升级 谈谈 版本 Angular

我们知道咱们目前在用的 Composable Storefront,基于 SAP Spartacus 这个开源项目,在 5.0 的时候,Spartacus 成为 SAP 正式产品之一,更名为 Composable Storefront. 咱们今天谈论的是 Composable Storefront 的升级问题,首先就要明确为什么我们要进行升级。

Spartacus 基于一系列的前端框架和第三方库,最显著的就是 Angular 这个开发框架和 Node.js。Angular 我们都很熟悉了,Spartacus 实际就是一个 Angular 应用,而 Node.js 的作用,主要体现在两个方面。一是 Spartacus 服务器端渲染基于 ngUniversal 这个工具库,而 ngUniversal 需要使用 Node.js 作为执行引擎。二是 Commerce Cloud Hosting Service 需要使用 Node.js 来对应用进行构建。

先看 Angular 本身的版本升级策略。Angular,Node.js 和 Spartacus,采取的都是语义化版本命名机制,A.B.C. A 代表 Major 版本也就是我们通常说的大版本,这些大版本的升级,包含大规模的功能更新,通常会引入不能向下兼容的 breaking change,不能向下兼容意味着旧版本的 Angular 应用,升级了大版本之后,需要开发人员手动修改源代码进行 rework,才能适配大版本升级后的 Angular 框架。

Angular 目前基本上每隔6个月就会发布一次新的大版本。

A.B.C 中间的 B 是 Minor 版本也叫小版本,理论上来说小规模的功能更新,不会对现有代码造成影响。底层框架的性能优化就经常放到小版本的更新里去。Angular 每个大版本内会包含1到3次小版本的更新。

Patch 版本包含错误修复。Angular 几乎每周都会发布一次新的 Patch 更新。

Angular 进行版本更新,原因主要有引入新功能,优化性能,提高开发者和终端用户使用体验,修复bug,安全漏洞等等。

我们从下面这张表里看到每个 Angular 的大版本会分为 Active 和 LTS 就是 Long Term Support 两个状态。Active 状态指这个版本处于积极的维护和小版本的迭代更新中,而 LTS 状态的版本,意味着这个版本已经非常稳定,不再进行新功能的迭代,而只包含非常 critical 的 bug 和安全漏洞的修复了。

简而言之,Active 状态的版本,小版本会继续迭代。而 LTS 状态的版本,只会有 patch 版本的更新。

Node.js 和 Angular 版本迭代的机制类似。

只是多了一个 CURRENT 状态,大家可以理解成开发版本,即 Node.js 发布给生态圈,搜集反馈并持续优化的版本。CURRENT 版本不建议用于生产环境。

Node.js 的每个版本都会从元素周期表里摘出一个元素作为版本代号。

比如 SAP 建议客户尽早升级到 Node 18,其维护状态结束日期是 2025年4月30日,还很早,而 Node.js 20 现在还是 CURRENT 状态,不建议在生产系统使用,所以我猜测 CCV2 目前也没有这个版本。

正因为 Angular 和 Node.js 每个版本都有着各自的生命周期,所以依赖于这两个工具的 Spartacus,每个版本也有着自己的生命周期。SAP 产品对于其使用的第三方库的版本有着严格要求,不允许使用那些已经停止维护的版本。比如我们看一下 Spartacus 5,5.0 是 2022年11月23日发版的,在这个时间点 Angular 12 早就已经过了维护日期,所以 Spartacus 5 不可能支持 Angular 12.

而 Angular
14 的维护结束日期是 2023年11月,也就是 Spartacus 5.0 发布一年之后。

再比如如今我们推荐客户升级到最新的 6.x 版本,依赖的 Angular 15,Node.js 18,分别在 2024年5月份和2025年才停止维护。

目前 Spartacus 每个小版本的有效时间是 6 个月。我们看一下 5.2 是2023年2月发布的,今年8月份结束了它的维护窗口。到目前为止,最新的是 6.4 版本,明年3月份结束维护。

推荐的升级路径是先从 5.2 升级到 6.0,再从 6.0 这个大版本开始往上升小版本。之所以要分成这两个阶段,原因之一是涉及到的 Angular 大版本的升级,和小版本的升级,执行的命令行是不一样的,没有办法一个命令行就一步到位。原因之二是这种先升级大版本,再升级小版本的分段步骤,如果升级过程中出现问题,更方便对问题进行隔离和定位,能够区分问题到底是大版本升级造成的,还是小版本升级造成的。

之前有客户反馈,大版本升级之后,之前定制开发里基于的一些 Angular 组件和服务,在升级之后找不到了,或者说发生了拆分,变成了多个。对于这种不能向下兼容的更改,一方面是以文字描述的方式,记录在了 SAP 官方帮助文档里。另外一种方式是,在 github 上能找到 Spartacus 的源代码,在源代码里根据关键字 //TODO: Spartacus 就能找到所有发生了不能向下兼容的代码的全部位置。另外,Spartacus 也提供了所谓的 migration schematics 即自动扫描机制来辅助大版本的升级。这个工具会扫描我们的二次开发代码,当发现代码里引用的组件或者服务,在大版本升级之后发生了不能向下兼容的更改,就会自动加上 TODO 的注释,以及包含了简单的更改建议。图里是一些例子。

标签:Node,Spartacus,js,升级,谈谈,版本,Angular
From: https://www.cnblogs.com/sap-jerry/p/17795951.html

相关文章

  • Tita 升级|「绩效」支持指标多维度评价
    1.【绩效考核】支持指标从多个维度进行评价Tita-OKR和新绩效一体化管理平台使用场景:在企业考核员工指标时,有时需要从多个维度(如完成度、挑战度等)进行评价,通过换算得出最终的指标评分,详细设置请参考此文档;2.【绩效考核】支持设置满足一定条件的人才发起面谈使用场景:在部......
  • Angular 应用如何从 Transfer State 状态中读取数据
    在Angular应用程序中,数据的传递和共享是一个重要的问题。Angular提供了多种机制来处理这个问题,其中之一就是TransferState机制。本文将深入探讨上述代码中的AngularTransferState的用法,并介绍如何在Angular应用中有效地利用它。AngularTransferState简介AngularTransferS......
  • centos7.9离线内核升级内核
    一、centos7离线升级系统内核1,centos7系类内核版本为3.10centos6系列内核版本为2.6,我这边操作是基于centos7.9内核进行小版本的离线升级,在线的就不在这多说了。内核版本3.10.0-1160.el7.x86_64升级为——3.10.0-1160.95.1.el7.x86_64 2,查看系统环境查看操作系统版本 [ro......
  • Angular dynamic import 技术详解
    Angular是一款由Google开发的开源前端框架,它能够帮助开发者更加高效地构建复杂的单页应用。Angular的一个重要特性是动态导入(Dynamicimports),它的出现大大提高了Angular应用的性能和用户体验。在讲解动态导入之前,我们需要先了解一下静态导入和动态导入的区别。在JavaScrip......
  • Angular 中的 code splitting 和 lazy loading 技术
    Angular中的LazyLoading技术详解在Angular应用开发领域,实现LazyLoading是一个重要而复杂的任务,特别是在构建时需要动态加载代码的情况下。本文将详细介绍AngularLazyLoading的更多细节,包括核心概念、实际应用和解决方案。LazyLoading是一项在应用构建时进行的技术,通常是基于......
  • IBM V7000微码升级方案
    目录第一章升级时间3第二章微码升级步骤3第三章应急预案9升级时间每一个结点的软件升级耗时大约30–40分钟。GUI会显示“Complete”。整个V7000的软件升级耗时大约90-120分钟。注意:微码升级过程中,可能会导致主机意外的硬件或是软件故障,需要为修复这些故障预留足够的服务......
  • dynamic import 在 Angular 应用中的使用场合讲解
    Angular的Dynamicimports(动态导入)是一种强大的技术,它允许你在运行时按需加载模块,从而优化应用程序的性能和加载时间。在本文中,我将详细介绍什么是Angular的Dynamicimports以及如何使用它来提高应用程序的效率。我们将探讨Dynamicimports的工作原理、使用场景、语法示例以及最佳......
  • Angular 中 Lazy Loading 的陷阱与最佳实践
    在Angular应用程序的开发过程中,性能优化一直是一个关键问题。其中之一是使用懒加载(LazyLoading)来延迟加载应用程序的某些部分,以减小初始加载时间并提高用户体验。然而,在实施LazyLoading时,开发人员可能会陷入一些常见的错误,本文将详细介绍这些错误以及如何避免它们。为什么要使......
  • 实现 Angular Lazy loading 时应该避免 Static Imports 的原因
    在Angular应用开发中,Lazyloading(懒加载)是一种常用的优化技术,通过Codesplitting(代码拆分)实现。然而,在实现过程中,开发者往往会遇到一些常见的问题。本文将详细介绍在实现AngularLazyloading时应该避免的错误,并提供实际的示例进行说明。避免Lazy-Loaded代码的静态导入......
  • Tita 升级|「OKR」支持设置企业默认可见范围
    升级详情Tita-OKR和新绩效一体化管理平台一、企业默认目标可见范围 1.OKR创建过程忘记修改可见范围可能导致输据泄露,现在企业可设置自己偏好的目标可见范围管理员可在企业管理规定>OKR规定>目标默认可见范围中进行设置2.开启后有什么影响创建目标时,会与企业设置的......