Since Angular 6, tree-shakable dependencies can be created using the `providedIn` option on `@Injectable` and factory-based `InjectionToken` constructors, eliminating the need for NgModule providers. This post covers the evolution from pre-Angular 6 patterns (NgModule providers, forRoot pattern) to modern approaches for singleton services, primitive values, and platform-specific APIs. It also explains how to guard against multiple injectors, how to test tree-shakable dependencies using `TestBed.overrideProvider`, and why tree-shaking matters most for shared libraries and large applications.

13m read timeFrom playfulprogramming.com
Post cover image
Table of contents
Angular module providers create hard dependencies Copy link Link copied!Providing singleton services Copy link Link copied!Providing primitive values Copy link Link copied!Providing platform-specific APIs Copy link Link copied!Testing tree-shakable dependencies Copy link Link copied!Do tree-shakable dependencies matter? Copy link Link copied!Summary Copy link Link copied!Related articles Copy link Link copied!Peer reviewers Copy link Link copied!

Sort: