将 Spartacus 升级到新的主要版本(例如,从 3.x 到 4.0)时,Spartacus 迁移机制会自动修复新版本中修改或删除的代码。

当您处理功能或错误,或对 Spartacus 源代码进行任何其他更改时,您需要更新原理图作为完成定义的一部分。 通过将这些更新迭代地作为 DoD 的一部分对源代码进行每次更改,您就不必在开发周期结束时花费大量时间升级迁移机制,因此,它更容易 为新的主要版本准备 Spartacus 库。

Migration Mechanism

升级到新的主要版本后,迁移机制应该在新的开发周期开始时更新。 比如Spartacus已经从2.x版本更新到3.0,更新后的机制应该尽快合并到develop分支。 这允许贡献者从开发周期的一开始就包含迁移及其功能和错误修复。

Structure for Updating Schematics

下面这个文件包含了每个 Spartacus 版本对应的迁移脚本:

projects/schematics/src/migrations/migrations.json

下面是其中一个迁移脚本的例子:

"migration-v3-constructor-deprecations-03": {"version": "3.0.0","factory": "./3_0/constructor-deprecations/constructor-deprecations#migrate","description": "Add or remove constructor parameters"},

26 个子文件:

以 v3 为例:

每个脚本有四个属性:name,version, factory 和 description:

name 允许开发人员快速了解迁移脚本在做什么。 迁移名称具有以下模式:

migration-v<version>-<migration-feature-name>-<sequence-number>。 

name的要素如下:

  • version:
    指示迁移适用于哪个版本的 Spartacus。

  • migration-feature-name:

迁移功能名称是一个简短的名称,用于描述迁移正在执行的操作。

  • sequence-number: 序列号指示迁移脚本的执行顺序。 例如,如果脚本的序列号为 03,则在运行迁移脚本时,它将是要执行的第三个脚本。

版本对于 Angular 更新机制非常重要。 它用于自动运行特定版本所需的迁移脚本。 有关更多信息,请参阅原理图自述文件的发布更新原理图部分。

factory 指向相关的迁移脚本。

description 是一个简短的、自由格式的描述字段,用于描述迁移脚本的作用。

Constructor Deprecation

projects/schematics/src/migrations/2_0/constructor-deprecations.ts 执行构造函数迁移任务。 通常,开发人员不需要接触这个文件,而是应该在projects/schematics/src/migrations/2_0/constructor-deprecation-data.ts 中描述构造函数的弃用。 CONSTRUCTOR_DEPRECATION_DATA 常量描述了已弃用的构造函数,并包括 addParams 和 removeParams 属性,它们允许您分别指定应添加或删除哪些参数。

Commenting Code

当无法自动迁移代码时,我们通常会在客户的代码库中添加注释,描述客户应该如何将他们的项目升级到新版本的 Spartacus。 我们应该只在手动升级很容易并且编写迁移脚本太复杂的情况下才这样做。

projects/schematics/src/shared/utils/file-utils.ts#insertCommentAboveIdentifier 方法在指定标识符 TypeScript 节点上方添加注释。

以下是如何添加评论的示例:

  1. 如果您删除了一个 API 方法,您可以在删除的方法上方添加一条注释,建议可以改用哪个方法。

  2. 如果您更改了 NgRx 操作的参数,您可以在更改参数的操作上方添加注释。

Component Deprecation

与构造函数弃用类似,projects/schematics/src/migrations/2_0/component-deprecations.ts 为组件 *.ts 和 HTML 模板执行组件迁移任务。 通常,开发人员不需要接触这个文件,而是应该在projects/schematics/src/migrations/2_0/component-deprecations-data.ts 中描述组件的弃用。 COMPONENT_DEPRECATION_DATA 常量描述了已弃用的组件。

CSS

为了处理 CSS 更改,我们打印了一个指向 CSS 迁移文档的链接,客户可以在其中查找哪些 CSS 选择器在新版本的 Spartacus 中发生了更改。 如果您要更改 CSS 选择器,只需更新相关文档(例如 3.0 中的样式更改)。

Adding a Migration

(1) 检查是否有任何更改的文件在公共 API 中导出。 如果否,则无需采取进一步措施。

(2) 检查您所做的任何更改是否是破坏性更改。 如果没有,则无需采取进一步措施。 有关更多信息,请参阅维护公共 API。

(3) 对于每个重大更改,您必须执行以下操作:

a. 通过更新相应的迁移文档文件(例如 docs/migration/3_0.md)来记录重大更改,并在必要时确保已添加代码注释。

b. 构建自动化任务,如上面的验证、构造函数弃用和组件弃用)部分所述。

c. 通过运行测试、尝试迁移示例应用程序等来测试添加的迁移。

更多Jerry的原创文章,尽在:“汪子熙”:

借助 SAP 电商云 Spartacus UI 提供的 Schematics 辅助您的前端项目升级相关推荐

  1. SAP 电商云 Spartacus UI Proxy Facade 的一个实际例子

    如何理解 SAP 电商云 Spartacus UI 中的 proxy facade? Jerry 这篇文章什么是 SAP 电商云 Spartacus UI 的 proxy façade提供了理论上的解 ...

  2. SAP 电商云 Spartacus UI 产品搜索结果的设计明细

    我们使用如下 url 访问 SAP 电商云 Spartacus UI 产品搜索页面: http://localhost:4000/electronics-spa/en/USD/search/sony ...

  3. Mobile first 设计思路在 SAP 电商云 Spartacus UI 中的设计体现一例

    关于 Mobile First 的概念,请查看我这篇文章:什么是前端开发中的 mobile first 策略. 下图是 SAP 电商云 Spartacus UI 的搜索结果页面: 其布局设计:temp ...

  4. SAP 电商云 Spartacus UI ComponentDataProvider defer 工厂函数

    为什么 this.componentService.getItems 最后就触发到 Component-data.provider.ts 工厂函数的执行了? 29行的 getService: getS ...

  5. SAP 电商云 Spartacus UI 里如何捕捉语言设置的更改

    我们知道在 SAP 电商云 Spartacus UI 里,用户可以通过下拉菜单更改当前访问 site 的语言: 监控语言变化的代码: this.subscription.add(this.langua ...

  6. 在 SAP 电商云 Spartacus UI 里手动注入 module 的几种排列组合

    先把所有的排列组合罗列如下: (1) 通过构造函数注入 QuickOrderFacade,但不调用其方法 (2) 通过构造函数注入 QuickOrderFacade,调用其方法 (3) 手动通过 in ...

  7. SAP 电商云 Spartacus UI Quick Order 主页的实现

    存货单位(英語:stock keeping unit,SKU/ˌɛsˌkeɪˈjuː/),也翻译为库存单元,是一個會計學名詞,定义为库存管理中的最小可用单元,例如纺织品中一个SKU通常表示规格.颜色. ...

  8. SAP 电商云 Spartacus UI 从 CMS 取回 slots 和 component 之后的处理

    从前一篇文章SAP 电商云 Spartacus UI 的双重 layout 配置层设计 我们得知,Spartacus 层面的 layout-config.ts 可以控制 page template 应 ...

  9. SAP 电商云 Spartacus UI 产品明细页面路由路径的自定义配置

    如下图所示,为了减少 SAP 电商云 Spartacus 客户实施时不必要的配置,Spartacus 将不少页面的路由路径的默认配置,定义在如下的 default-routing-config.ts ...

最新文章

  1. adv7842自定义方式
  2. 赛道一出,今后无需再熬夜
  3. impala连接使用方法
  4. bitnami-redmine邮件告警配置
  5. AssertionError: nn criterions don‘t compute the gradient w.r.t. targets
  6. 为什么全局变量不好?[翻译]
  7. Spring Boot 使用 AOP 防止重复提交
  8. 报错:OMP: Error #15: Initializing libomp.dylib, but found libiomp5.dylib already initialized.
  9. 上计算机课给新老师的一封信,给计算机老师的一封信 (精选可编辑)
  10. JNI开发笔记(一)--Android Studio安装与环境搭建
  11. 华为手机android版本升级失败怎么办,华为手机系统更新好吗 华为手机系统更新方法...
  12. Office for Mac升级提醒MAU如何去掉或关闭?
  13. 孙玄达叔:年薪75万的真实技术面试实践攻略(篇章二)
  14. Oracle 购买价格 和 服务费 计算方式
  15. 图表横坐标怎么改倾斜_Excel 图表横轴文字太长,不想让它倾斜,如何分行显示?...
  16. 如何修改图片的dpi?教你一招快速修改照片dpi的方法
  17. UnityShader_天空盒子中的反射、折射、聂菲尔效应
  18. 1到3岁宝宝如何选择玩具
  19. ats2851 / cm591 ugreen bluetooth 5.3 for Linux
  20. pdf 加深 扫描件_福昕PDF如何用更高的DPI将文档扫描成PDF

热门文章

  1. 密位测距离口诀_电气故障怎么查?最新最全的79条电气故障诊断口诀
  2. Spring与mybatis整合---Mybatis学习笔记(十一)
  3. linux之权限管理_1
  4. How do I get the lowest value of all the non zero value pixels?
  5. 团队项目—每日记录2
  6. 用户权限 组 特殊权限
  7. [C语言程序设计_现代方法(第2版)] 第二章 C语言基本概念
  8. C++ Standard Stl -- SGI STL源码学习笔记(07) stl_vector 与 一些问题的细化 3 resize函数剖析...
  9. Kickstart+NFS+DHCP+TFTP+PXElinux实现CentOS的网络自动安装
  10. 如何下载今日头条视频