为什么 tree-shake 删除了服务中未使用的 public 方法

Why is a unused public methods from services removed by tree-shake

我们正在开发一个网络应用程序,使用了相当大的 API,它作为 npm 库包含在内。该库有很多方法,在应用程序中没有使用,我们的假设是,这些方法不包含在生产构建中。但是,针对应用程序中未使用的特定方法的检查仍包含在生产版本中。

示例:

生成的生产版本: 未在应用程序中使用:

为什么没有被tree-shaking掉,有什么办法可以tree-shaking吗? (例如使用更严格的设置)

Tree shaking 通过查看导入路径来管理服务代码。 如果它是导入的,摇树器会假定它正在应用程序中使用。

例如。当我们在@NgModule 中注入服务时,我们在导入中提到了服务,因此它被丢弃并被 tree shaker

视为已使用的实体
@NgModule({
  imports: [],
  declarations: [AppComponent],
  bootstrap: [AppComponent],
  providers: [SomeService]
});

如果我们使用@Injectable 的'providedIn' 注入服务,只有在模块要求时才会注入服务,否则,它将被treeshaker 删除。使用'providedIn'我们可以告诉Angular我们的服务注册到哪个模块。

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class SomeService{
  constructor() {}
}