Angular构建后注入服务的属性与方法未被压缩的原因
为什么Angular服务注入的属性与部分方法未被代码压缩?
原始服务代码
class MyService extends BaseService { constructor( private translationService: TranslationService, private authService: AuthService) { super() } getActiveLang() { return this.translationService.getActiveLang() } getUserMail() { const user = this.authService.currentUser(); return user ? user .email : null } }
构建压缩后的代码
class u extends w.PV { constructor(_, t) { super(), this.translationService = _, this.authService = t } getActiveLang() { return this.translationService.getActiveLang() } getUserMail() { const _ = this.authService.currentUser(); return _ ? _.email : null } }
原因分析
- 依赖注入属性的保护性保留:Angular依赖注入系统需要通过类属性关联注入的服务实例,压缩工具无法确定这些属性是否会被外部代码直接访问,为了保证依赖注入逻辑不被破坏,会保留这些属性的原始名称。
- 公共方法的外部引用需求:
getActiveLang和getUserMail是服务对外暴露的公共方法,压缩工具会检测代码中是否存在对这些方法的外部调用。即使当前代码中没有显式引用,Angular的AoT编译机制可能会标记这些方法为可被外部访问,因此压缩工具不会对其重命名,避免出现调用失败的情况。 - 局部变量已正常压缩:方法内部的局部变量
user已被压缩为_,说明压缩工具本身功能正常,只是针对类的公共成员和注入相关属性做了保护性处理。
内容的提问来源于stack exchange,提问作者ar099968
相关产品推荐
相关产品推荐

