Angular 库模块从模块导出组件、服务和其他

Angular Library Modules export components, services and others from module

我创建了一个 Angular 库。在我的库中,我希望它通过在其中包含功能模块来保持干净:

示例:

Library
  NavigationModule
    NavigationSideBarComponent
    NavigationTopComponent
    Navigation Service
    etc

  GraphModule
    BarGraphComponent
    PieGraphComponent

我的导航模块目前看起来像这样:

@NgModule({
  declarations: [
    NavigationSidebarComponent
  ],
  imports: [
    CommonModule,
    MatSidenavModule
  ],
  exports: [
    NavigationSidebarComponent
  ]
})
export class NavigationModule { }

我的图书馆模块目前看起来像这样:

@NgModule({
  declarations: [LibraryComponent],
    imports: [
      NavigationModule
    ],
    exports: [
      LibraryComponent
      //NavigationSidebarComponent  <-- Did not work
    ]
 })
 export class LibraryModule { }

我发现的大多数教程都在使用一个只有组件的库,没有其他任何东西,比如模块。我在库中找到的使用模块的教程没有展示如何导出片段。

基本上我想将此库导入任何应用程序,并能够调用 NavigationSidebarComponent 或库或服务中模块的任何其他组件。

我会继续调查这件事。

您必须在 LibraryModule 中导出 NavigationModule,而不是 NavigationSidebarComponent

我认为您根本不需要顶级“图书馆模块”。查看 the source tree for @angular/material: I think they used to have a material.module and got rid of it, and now the root only has a completely empty index.ts. Each component has its own module, and modules like the one for MatAutocomplete 它们依赖的导入模块(如 MatOptionModule)和 re-export 它们。

我一直在将我的一个项目转换为类似的模型,并进行研究以找出模块结构的当前最佳实践。我相信 Material 从“整体库”方法转换而来,鼓励您 import { MatAutocompleteModule } from "@angular/material" 每个组件(或一组相关组件)一个模块,因为这种方法允许您将库作为单个包,但仍然受益于 tree-shaking,因此只有实际使用的模块才会包含在您的构建中。