如何使用Spartacus库的私有API
有时我们想要扩展的类不是 Spartacus 公共 API 的一部分。因此我们不能直接SomeClass从@spartacus/xxxxx.
我们已经发现或创建了一个 github 问题,并提出了SomeClass在公共 API 中导出的建议。现在等待斯巴达克斯核心团队的回应。
如果我们真的需要导入它并在我们的项目中扩展,我们可以做些什么呢?
回答
当您需要 Spartacus 的私有 API 成员时,请先:
- 在Spartacus github 问题中搜索相关请求以将其公开
- 如果没有问题,请创建一个新问题。
免责声明:一般不应使用 Spartacus 的私有 API。它可能会在没有任何警告的情况下随时更改。您可以根据自己的风险使用以下解决方法。升级到任何下一个版本后,它可能会导致破坏您的代码。
打开文件node_modules/@spartacus/xxxxx/spartacus-xxxxx.d.ts并找到类的导出别名,前缀为符号?:
export { SomeClass as ?xyz } from '..........';
然后您可以在应用程序中使用别名,例如扩展类行为:
import { ?xyz as SomeClass } from `@spartacus/core`;
/* ... */
// for example:
@Injectable()
export class CustomSomeClass extends SomeClass {
/*...*/
}
/* ... */
@NgModule({
providers: [
{ provide: SomeClass, useClass: CustomSomeClass }
]
})
警告:?-alias 可能会在没有任何警告的情况下在 Spartacus 的任何下一个版本中更改。它不是公共 API 的一部分。