为什么 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() {}
}
我们正在开发一个网络应用程序,使用了相当大的 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() {}
}