You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular是否会摇树优化未注入组件的根级提供服务?

Angular服务摇树优化问题解答

问题描述

假设我们有一个属于类库的服务,代码如下:

@Injectable({ providedIn: 'root' })
export class ChartJSProvider {
  constructor() {
    Chart.register(...registerables);
  }
}

当应用引入该类库后,若ChartJSProvider服务未被注入到应用使用的任何组件中,Angular是否会自动创建该单例并将其包含在运行实例中,还是会对其进行摇树优化?

答案

  • 对于使用providedIn: 'root'声明的服务,Angular的构建系统(配合webpack等打包工具)默认支持摇树优化。
  • 如果这个服务没有被应用中的任何组件、服务或其他注入器通过依赖注入的方式引用,那么它的代码会被从最终的打包产物中移除,不会被自动创建单例实例,构造函数里的Chart.register(...registerables)代码也不会执行。
  • 需要注意:只有当服务完全没有被依赖引用时才会被摇掉,如果类库内部有其他代码直接引用了这个服务类,那它可能不会被优化掉,但单纯未被应用注入使用的情况,符合摇树条件。

内容的提问来源于stack exchange,提问作者Ole

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 13:13:24