创建一个从第三方库提供服务的Angular共享库和模块是一个好做法吗?



我正在做一个Angular项目,它将有两个应用和一个共享的服务模块,可能还有共享的特性模块。定义"核心"似乎是一种常见的做法。该模块导出CommonModule和FormsModule,以及应用和特性模块所需的其他通用组件、管道和指令。Core模块导出它们,使它们都可以从一个Core模块中获得。模块。我想知道对来自第三方库的服务/提供者(例如日志服务)做同样的事情是否也有意义。似乎我可以在我的核心模块中编写一个forRoot()函数,该函数返回我的应用程序所依赖的第三方库中的所有提供商,作为"将它们泡起来"的一种方式。然后,每个应用模块只需导入CoreModule.forRoot(),就可以将一组通用的依赖项(组件、管道、指令和服务)导入到应用中。一些第三方库可以被配置,因此CoreModule.forRoot()可以接受一个配置对象来配置各种第三方模块。

我试了一下,发现它不允许"冒泡";在您自己的库中使用第三方库的提供程序,然后将您自己的库导入到应用程序中。我尝试的方法是在共享库中编写一个forRoot()函数,该函数反过来称为LoggerModule.forRoot():

static forRoot(config: LoggerConfig): any[] {
return [
MyCoreModule,
LoggerModule.forRoot(config),
];
}

编译器报告forRoot()函数无法静态求值的错误。所以…我想我最初的问题的答案是:不,您不应该尝试从第三方库中冒泡提供程序。相反,应用模块应该直接导入第三方模块。在我的例子中是:

imports: [
LoggerModule.forRoot({
level: NgxLoggerLevel.DEBUG,
}),
]

最初的目标是隐藏第三方库&一个"核心"中的模块图书馆是为了创造一种"平台"图书馆。但这也有它自己的缺点。

最新更新