Angular CLI 6 introduced a new concept of builders (aka Architect Targets).
There are a couple of prebuilt builders that come with @angular-devkit/build_angular
, but unfortunately there is no documentation that explains how to create your own builder.
How do I create my own builder (for example to modify the underlying webpack configuration)?
For Angular 8+ read this AngularInDepth article.
The full article can be found here.
For the sake of simplicity I assume that the new builder is implemented in Typescript, but it can be implemented in pure JavaScript as well.
builders
entry pointing to builders.json
Implement your builder in my-cool-builder/index.ts. The builder has to implement the following interface:
export interface Builder<OptionsT> {
run(builderConfig: BuilderConfiguration<Partial<OptionsT>>): Observable<BuildEvent>;
}
While BuildEvent
is this:
export interface BuildEvent {
success: boolean;
}
BuilderConfiguration
is this:
export interface BuilderConfiguration<OptionsT = {}> {
root: Path;
sourceRoot?: Path;
projectType: string;
builder: string;
options: OptionsT;
}
And OptionsT
is the interface you defined for your builder options in schema.d.ts
You can use browser
architect target as a reference.
Once implemented, add your builder to builders.json:
{
"$schema": "@angular-devkit/architect/src/builders-schema.json",
"builders": {
"cool-builder": {
"class": "./my-cool-builder",
"schema": "./my-cool-builder/schema.json",
"description": "My cool builder that builds things up"
}
}
}
In your angular.json:
"architect": {
...
"build": {
"builder": "./custom-builders:cool-builder"
"options": {
your options here
}
For the full example check out this library: https://github.com/meltedspark/angular-builders
For those who use Angular 8 and higher, builders API is now officially supported and documented: https://angular.io/guide/cli-builder
It has a lot of changes compared to the previous version, so migration from Angular 7 to 8 might become complicated if you are using undocumented Architect API.
Here's a nice article to get started: https://blog.angular.io/introducing-cli-builders-d012d4489f1b
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With