Angular是否会摇树优化未注入组件的根级提供服务?
Angular服务摇树优化问题解答
问题描述
假设我们有一个属于类库的服务,代码如下:
@Injectable({ providedIn: 'root' }) export class ChartJSProvider { constructor() { Chart.register(...registerables); } }
当应用引入该类库后,若ChartJSProvider服务未被注入到应用使用的任何组件中,Angular是否会自动创建该单例并将其包含在运行实例中,还是会对其进行摇树优化?
答案
- 对于使用
providedIn: 'root'声明的服务,Angular的构建系统(配合webpack等打包工具)默认支持摇树优化。 - 如果这个服务没有被应用中的任何组件、服务或其他注入器通过依赖注入的方式引用,那么它的代码会被从最终的打包产物中移除,不会被自动创建单例实例,构造函数里的
Chart.register(...registerables)代码也不会执行。 - 需要注意:只有当服务完全没有被依赖引用时才会被摇掉,如果类库内部有其他代码直接引用了这个服务类,那它可能不会被优化掉,但单纯未被应用注入使用的情况,符合摇树条件。
内容的提问来源于stack exchange,提问作者Ole
相关产品推荐
相关产品推荐

