Reference App Structure
這個推薦的 Spartacus 應用程式結構旨在作為您設定自己的 Spartacus 應用程式時的參考。
Spartacus 是一個 Angular 庫,這意味着它可以在 Angular 應用程式中單獨使用,也可以內建到現有的 Angular 項目中。相反,您可以将任何其他 Angular 解決方案或庫添加到您的 Spartacus 項目中。
Spartacus 本身帶有多個層和概念,以及一些可以延遲加載開箱即用的較小特征庫。自定義和第三方代碼進一步增加了複雜性,您最終可能會得到難以維護的子產品,因為它們将太多這些元素混合在一起。
這可以通過定義和遵守标準化結構來解決,例如 Spartacus 參考應用程式結構。擁有标準化結構還可以更輕松地将新開發人員納入您的項目、處理外部支援案例以及進行審計。
通過使用 Spartacus 參考應用程式結構,您可以從每個主要 Spartacus 版本提供的自動遷移中獲益最多,同時還保持添加自定義的靈活性,并在這些自定義之上建構新功能。使用參考應用程式結構還可以為 3.0 版本後移入單獨庫的功能利用代碼拆分。
要檢視使用參考應用程式結構的工作示例,請參閱此存儲庫。
Spartacus Module
該 module 導入 B2C 或者 B2B 配置 module,以及 BaseStorefrontModule 和 SpartacusFeaturesModule:
導出 BaseStorefrontModule.
注意,雖然 Angular Router 和 NgRx 都是 Spartacus 使用的,但是這些都會影響全局應用,是以它們被儲存在 SpartacusModule 之外,直接導入到 AppModule 中。
SpartacusModule 由以下部分組成:
- BaseStorefrontModule,它封裝了大多數 Spartacus 應用程式通常需要的核心 Spartacus 導入。
BaseStorefrontModule 直接從@spartacus/storefront 導入。
- SpartacusFeaturesModule,它封裝了 Spartacus 功能。
- SpartacusConfigurationModule,它封裝了通用的 Spartacus 配置。
在大多數情況下,Spartacus 子產品不會被修改,因為更改通常封裝在配置子產品或功能子產品中。
下面是 SpartacusModule 的實作:
import { NgModule } from '@angular/core';
import { BaseStorefrontModule } from '@spartacus/storefront';
import { SpartacusConfigurationModule } from './spartacus-configuration.module';
import { SpartacusFeaturesModule } from './spartacus-features.module';
@NgModule({
imports: [
BaseStorefrontModule,
SpartacusFeaturesModule,
SpartacusConfigurationModule,
],
exports: [BaseStorefrontModule],
})
export class SpartacusModule {}
複制
Spartacus Configuration Module
該 Module 包含所有全局的配置元素。
特性特定的配置可以儲存在特性子產品中,也可以儲存在 SpartacusConfigurationModule 中。 将它們儲存在功能子產品中有助于保持良好的關注點分離,是以通常建議這樣做,但如果有助于解決特定問題(例如,通過使用 env 更改配置)。
Spartacus Features Module
SpartacusFeaturesModule 旨在輕松管理所有非核心 Spartacus 功能,包括靜态加載和延遲加載。 它充當所有功能的入口點,理想情況下,這些功能被包裝到自己的獨立功能子產品中。
在早期的 3.x 次要版本中,SpartacusFeaturesModule 可能看起來臃腫而忙碌,但随着每個連續的釋出,它應該變得更加簡潔,因為努力将大部分功能移到單獨的庫中。
例子:
Specific Feature Modules
理想情況下,可以将一個完整的功能封裝到一個特定的功能子產品中。該子產品可以包含與功能相關的配置以及自定義。
以下是具有延遲加載配置的功能子產品的示例:
FeatureModule eager 加載輕量級的 QuickOrderRootModule,然後使用延遲加載,去處理包含了重量級的 Service 和 Component 實作的 QuickOrderModule.
某些 feature module 的啟用與否,通過環境變量來決定: