将 SAP Spartacus 作为 feature module 进行 Lazy Load 延迟加载时遇到的注入错误分析

简介: 将 SAP Spartacus 作为 feature module 进行 Lazy Load 延迟加载时遇到的注入错误分析

将 SAP Spartacus 作为 feature module 进行 Lazy Load 延迟加载时,遇到如下错误:

6ac2e7358f5c5a978efd3cdcfe117e4e.png

ERROR Error: Uncaught (in promise): NullInjectorError: R3InjectorError(CatalogModule)[UserAuthEventModule -> UserAuthEventBuilder -> UserAuthEventBuilder -> AuthService -> OAuthLibWrapperService -> OAuthService -> OAuthService -> OAuthService]:
NullInjectorError: No provider for OAuthService!
NullInjectorError: R3InjectorError(CatalogModule)[UserAuthEventModule -> UserAuthEventBuilder -> UserAuthEventBuilder -> AuthService -> OAuthLibWrapperService -> OAuthService -> OAuthService -> OAuthService]:
NullInjectorError: No provider for OAuthService!
at NullInjector.get (core.js:11120:1)
at R3Injector.get (core.js:11287:1)
at R3Injector.get (core.js:11287:1)
at R3Injector.get (core.js:11287:1)
at injectInjectorOnly (core.js:4770:1)
at Module.ɵɵinject (core.js:4774:1)
at Object.OAuthLibWrapperService_Factory [as factory] (spartacus-core.js:1514:1)
at R3Injector.hydrate (core.js:11457:1)
at R3Injector.get (core.js:11276:1)
at injectInjectorOnly (core.js:4770:1)
at resolvePromise (zone.js:1211:1)
at resolvePromise (zone.js:1165:1)
at zone.js:1278:1
at _ZoneDelegate.invokeTask (zone.js:406:1)
at Object.onInvokeTask (core.js:28679:1)
at _ZoneDelegate.invokeTask (zone.js:405:1)
at Zone.runTask (zone.js:178:1)
at drainMicroTaskQueue (zone.js:585:1)UserAuthEventModule


具体分析:


UserAuthEventModule 使用了 UserAuthEventBuilder 作为依赖:

f772a98d67238a5b3d27bf76b215daba.png

UserAuthEventBuilder 使用了 AuthService:

8c613a116b9ff2c2ed8f16fc554de199.png

AuthService 使用了 OAuthLibWrapperService

91692e48e858f465f05f3133e057a786.png

OAuthLibWrapperService 使用了 OAuthService

91692e48e858f465f05f3133e057a786.png

这个 OAuthService 最后来自 angular-oauth2-oidc,一个开源的 Angular oAuth2 实现库:

e274b1da3f26e6e0c3fb5a3b2026b600.png

OAuthService angular-oauth2-oidc


根据错误消息 No provider for OAuthService 在网上查找,发现下列这个 known issue:


https://github.com/manfredsteyer/angular-oauth2-oidc/issues/258

0f21b0ed825f96fa869dbb289a5919b9.png

添加第 49 行的 OAuthModule.forRoot() 后,错误消失:

f772a98d67238a5b3d27bf76b215daba.png

https://github.com/manfredsteyer/angular-oauth2-oidc/issues/241


UserAuthEventModule 被 UserAuthModule 所 import:

c79c6151ef0b162f7a006ae83e11d939.png

UserAuthModule 最后通过 index.ts 导出:

3e43342d39c8a83958e1e7298a78b204.png

11f7eb651d6a8f2eaaf578dd1d63d007.png

172abbd767c6b017f748f83bb6aeec95.png

4a047d960e78aa91dd9af8d7e05b30c8.png

遇到新的错误:


ERROR Error: Uncaught (in promise): NullInjectorError: R3InjectorError(CatalogModule)[EffectsFeatureModule -> InjectionToken @ngrx/effects Feature Effects -> [object Object] -> LanguagesEffects -> SiteConnector -> SiteConnector -> SiteAdapter -> SiteAdapter -> SiteAdapter]:
NullInjectorError: No provider for SiteAdapter!
NullInjectorError: R3InjectorError(CatalogModule)[EffectsFeatureModule -> InjectionToken @ngrx/effects Feature Effects -> [object Object] -> LanguagesEffects -> SiteConnector -> SiteConnector -> SiteAdapter -> SiteAdapter -> SiteAdapter]:
NullInjectorError: No provider for SiteAdapter!
at NullInjector.get (core.js:11120:1)
at R3Injector.get (core.js:11287:1)
at R3Injector.get (core.js:11287:1)
at R3Injector.get (core.js:11287:1)
at injectInjectorOnly (core.js:4770:1)
at Module.ɵɵinject (core.js:4774:1)
at Object.SiteConnector_Factory [as factory] (spartacus-core.js:7506:1)
at R3Injector.hydrate (core.js:11457:1)
at R3Injector.get (core.js:11276:1)
at NgModuleRef$1.get (core.js:25352:1)
at resolvePromise (zone.js:1211:1)
at resolvePromise (zone.js:1165:1)
at zone.js:1278:1
at _ZoneDelegate.invokeTask (zone.js:406:1)
at Object.onInvokeTask (core.js:28679:1)
at _ZoneDelegate.invokeTask (zone.js:405:1)
at Zone.runTask (zone.js:178:1)
at drainMicroTaskQueue (zone.js:585:1)

747660eb7b9cf77308070a7fa79d550c.png

79e882b2d12625f6a9f30743ebe7f841.png

172abbd767c6b017f748f83bb6aeec95.png

很多 forRoot 方法:

c79c6151ef0b162f7a006ae83e11d939.png

Minor 版本的更改,意味着我们添加了新功能,但它们默认配置为关闭,以免导致兼容性问题。 新的 Minor 版本还意味着包含可能影响兼容性的更改或错误修复,但这些也由功能标志控制。 因此,所有重大变化都是“选择加入(Opt-in)”。


目录
相关文章
|
6月前
|
JavaScript
Spartacus CMS Feature selector 的实现明细
Spartacus CMS Feature selector 的实现明细
43 0
|
3月前
|
存储 JSON 数据格式
Spartacus i18n Resource 的默认加载和 Lazy Load 两种方式的比较
Spartacus i18n Resource 的默认加载和 Lazy Load 两种方式的比较
18 0
|
3月前
|
JSON 开发者 数据格式
关于 SAP Spartacus LandingPage2Template 区域的 layout 设计实现
关于 SAP Spartacus LandingPage2Template 区域的 layout 设计实现
26 0
|
3月前
|
搜索推荐 开发者 UED
关于 SAP Spartacus 层的 UI 设计
关于 SAP Spartacus 层的 UI 设计
40 0
|
3月前
|
开发者 UED
SAP Spartacus BREAKPOINT 枚举类型在 Spartacus layout 实现中的作用
SAP Spartacus BREAKPOINT 枚举类型在 Spartacus layout 实现中的作用
24 0
|
6月前
|
前端开发
Spartacus lazy loading 模块中的配置管理
Spartacus lazy loading 模块中的配置管理
26 0
|
6月前
|
前端开发
Spartacus 应用中 Lazy Loaded Module 初始化逻辑的实现方案
Spartacus 应用中 Lazy Loaded Module 初始化逻辑的实现方案
33 0
|
6月前
|
JavaScript API
如何使用 TypeScript 的 module augmentation 技术增强 Spartacus Feature Library
如何使用 TypeScript 的 module augmentation 技术增强 Spartacus Feature Library
36 0
|
6月前
|
前端开发 搜索推荐 JavaScript
什么是 SAP Spartacus 的 CMS Page Connector
什么是 SAP Spartacus 的 CMS Page Connector
46 0
|
6月前
|
缓存 负载均衡 前端开发
SAP Spartacus 和 Sticky session 相关的话题
SAP Spartacus 和 Sticky session 相关的话题
38 0