首先看这个 class 的 get 定义:

接收两个输入参数,类型为:

  • NgExpressEngine
  • SsrOptimizationOptions

返回一个包装后的 NgExpressEngine

NgExpressEngine 是 Spartacus 自己创建的类型,本质是一个函数,输入参数为 NgSetupOptions,返回类型为 NgExpressEngineInstance.

后者又是一个函数,作为 ExpressEngine 的执行实例,接收 filePath,option 和 callback 作为参数。

一一对应:

返回一个新的函数,接收 E 即标准的 NgExpressEngine 的输入参数作为输入参数,同时将原来的两个输入参数 NgExpressEngine 和 Spartacus optimization 值存储起来:

稍后,在 server.ts 里,我们调用这个被包装之后的 ngExpressEngine,此时,输入参数为一个对象,字段为 bootstrap,这个对象就是图 E:NgSetupOptions

此时,执行函数体:

Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象分配到目标对象。它将返回目标对象。

调用 get 方法时传入的值,通过闭包存储在此:

三个点,就是将若干对象的不同名字段进行合并,最终结果:

其中闭包里的第一个输入参数,即是标准的 ngExpressEngine:

这里就是 Angular 标准的实现了,我们不操心:

注意返回的类型:

创建 OptimizationEngine 实例:

最后,返回一个新的函数 renderResponse,且该函数执行时,执行上下文为 OptimizedSsrEngine 本身:

从现在开始,this.engines 指向 Spartacus 自己的 renderResponse 函数了:

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

SAP Spartacus NgExpressEngineDecorator 的工作原理相关推荐

  1. SAP Spartacus 读取 Cart 的原理分析

    App.module.ts 的源代码: export class AppModule { constructor(private config: DebugConfig,private actions ...

  2. SAP Hybris install.bat工作原理分析

    以Windows平台为例,install.bat的内容: @echo off SET INSTALLER_WORKING_DIR=%~dp0 javac %INSTALLER_WORKING_DIR: ...

  3. SAP Spartacus 的 CSS 架构

    在 Angular 中,组件的 CSS 样式被封装进了自己的视图中,而不会影响到应用程序的其它部分. 通过在组件的元数据上设置视图封装模式,你可以分别控制每个组件的封装模式. 可选的封装模式一共有如下 ...

  4. SAP Spartacus自定义指令cxOutlet的工作原理

    cxOutlet合集 SAP Spartacus自定义指令cxOutlet的工作原理 SAP Spartacus table cell如何通过cxOutlet在运行时动态注入组件 SAP Sparta ...

  5. 深入理解 SAP Fiori Elements 工作原理系列之二:如何给 SAP Fiori Elements 应用添加自定义按钮

    这是 Jerry 2021 年的第 33 篇文章,也是汪子熙公众号总共第 309 篇原创文章. Jerry 的日常工作内容从 2020 年 8 月转到 Angular 前端开发之后,算是领略到了这个流 ...

  6. SAP Spartacus 重用组件cx-table的设计原理

    cx-table在SAP Spartacus尤其是B2B feature里有着广泛的用途: 它是一个shared Component,布局实现文件:table-component.html: 其中表格 ...

  7. SAP Fiori Elements 框架里 Smart Table 控件的工作原理介绍

    这是 Jerry 2021 年的第 34 篇文章,也是汪子熙公众号总共第 310 篇原创文章. Jerry 前一篇文章 深入掌握 SAP Fiori Elements 工作原理系列之二:如何给 Fio ...

  8. 使用 mock 数据在本地运行 SAP Fiori Elements 应用的工作原理

    本系列的前两篇文章: 在没有任何前端开发经验的基础上, 创建第一个 SAP Fiori Elements 应用 如何使用 mock 数据在本地运行 SAP Fiori Elements 本文研究 Fi ...

  9. SAP Spartacus在某些屏幕尺寸下无法正常工作的原因分析

    有个使用SAP Spartacus的客户遇到一个问题: We are getting one issue in our Spartacus application (currently we are ...

最新文章

  1. R语言Apriori算法关联规则挖掘:使用interestMeasure函数评估挖掘到的规则(包括覆盖率(coverage)和FishersExactTest)、置信度最高的五条规则(top five
  2. Spring Boot 实现多图片上传并回显,涨姿势了~
  3. 射频识别技术漫谈(14)——S50与S70存取控制【worldsing笔记】
  4. GraphQL入门之进一步了解GraphQL
  5. 多个单例模式单例模式的应用
  6. Foxmail记事插入的表格怎么设置单元格边距
  7. ZoomIn插件制作(VS2010 + arcObject10.2 )全网应该是唯一的
  8. Maven学习总结(49)——Maven Profile详解
  9. 全局变量不能放在头文件其中
  10. linux7mysql集群_linux下mysql集群搭建
  11. 数据库概述 数据库入门
  12. 解读:【小爱同学】智能问答系统
  13. Photoshop2023最新版安装教程及下载
  14. 突破SBO屏蔽限制,自由实现快捷键自定义
  15. 本地iis部署之后网页无法打开
  16. 【Linux】用进程控制知识做一个简易版shell
  17. 科技感十足的数码首图海报
  18. 在服务器创建并进入虚拟环境
  19. Android手机不同频率的听力测试功能实现
  20. 点击文本框弹出热门标签

热门文章

  1. iOS标准库中常用数据结构和算法之二叉排序树
  2. Codeforces Round #541 (Div. 2) C.Birthday
  3. [Animations] 快速上手 iOS10 属性动画
  4. vmware-tools安装
  5. 在 iOS创建 第一个Cordova 项目
  6. Elasticsearch之插件介绍及安装
  7. Redis单机部署、添加开机自启、配置参数
  8. oc---类方法load和initialize的区别
  9. sql作业启停服务器
  10. ubuntu登陆后一闪回到登陆界面