【问题标题】:Tree shaking for libraries in Angular 8Angular 8 中库的摇树
【发布时间】:2020-03-24 16:07:24
【问题描述】:

我正计划为 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 如何构建服务。

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

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

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

【问题讨论】:

    标签: javascript angular typescript npm tree-shaking


    【解决方案1】:

    你只需要

    providedIn: 'root'
    

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

    【讨论】:

    • OK - 所以我们甚至不需要在关联的模块中声明服务。我们可以简单地打包服务而不使用模块并发布到 NPM 吗?
    • 是的。从 Angular 6 开始,您不再需要在模块中提供服务。
    猜你喜欢
    • 2020-03-09
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    • 2021-11-26
    • 2020-06-19
    • 1970-01-01
    • 2019-11-08
    • 2018-10-15
    相关资源
    最近更新 更多