Angular 8 中图书馆的 Tree Shaking

Tree shaking for libraries in Angular 8

我正计划为 Angular 8+ 开发一个独立的 Angular 服务,并且我一直在阅读如何使其树可摇动树。

我相信all we need to do is this:

@Injectable({
  providedIn: 'root',
  useFactory: () => new Service('dependency'),
})
export class Service {
  constructor(private dep: string) {
  }
}

因为这告诉 Angular 如何构建服务。

这就是我们需要做的吗?我见过其他 NPM 模块,例如 this one use ModuleWithProviders 是这样的:

 export class Module {
  static forRoot(): ModuleWithProviders {
    return {
      ngModule: Module,
      providers: [
        StripeScriptTag
      ],
    }
  }

我认为这不是必需的,因为 providers 数组仍然没有描述如何实例化服务。

您只需要

providedIn: 'root'

root 中提供的服务是 tree shakeable 的。如果它在根中提供,那么您将在整个应用程序中获得相同的单例实例。如果您想要跨模块的服务的新实例而不是全局单例实例,则只需将它添加到提供程序数组。