Setup incremental builds for Angular applications
In this guide we’ll specifically look into which changes need to be made to enable incremental builds for Angular applications.
Incremental builds require @nrwl/angular:webpack-browser, which requires Nx version 10.4.0 or later.
Use buildable libraries
To enable incremental builds you need to use buildable libraries. You can generate a new buildable lib with
nx g @nrwl/angular:lib mylib --buildable
Adjust the executors/builders
Nx comes with faster executors allowing for a faster build. Make sure that your libraries use the @nrwl/angular:ng-packagr-lite builder.
"mylib": {
"projectType": "library",
...
"architect": {
"build": {
"builder": "@nrwl/angular:ng-packagr-lite",
"options": {...},
"configurations": {...}
},
"lint": {...},
"test": {...}
},
...
},
Change your Angular app’s executor to @nrwl/angular:webpack-browser and the “serve” executor to @nrwl/web:file-server instead.
"app0": {
"projectType": "application",
...
"architect": {
"build": {
"builder": "@nrwl/angular:webpack-browser",
"options": { ... }
"configurations": { ... }
},
"serve": {
"builder": "@nrwl/web:file-server",
"options": {
"buildTarget": "app0:build"
},
"configurations": {
"production": {
"buildTarget": "app0:build:production"
}
}
},
...
}
},
Running and serving incremental builds
To build an app incrementally use the following commands.
nx build myapp --with-deps --parallel
To serve an app incrementally use this command:
nx serve myapp --with-deps --parallel
Note: you can specify the --with-deps
and --parallel
flags as part of the options property on the file-server executor in your angular.json
or workspace.json
. The file-server executor will pass those to the nx build
command it invokes.
"app0": {
"projectType": "application",
...
"architect": {
"build": {
"builder": "@nrwl/angular:webpack-browser",
"options": { ... }
"configurations": { ... }
},
"serve": {
"builder": "@nrwl/web:file-server",
"options": {
"buildTarget": "app0:build",
"withDeps": true,
"parallel": true
},
"configurations": {
"production": {
"buildTarget": "app0:build:production"
}
}
},
...
}
},
Example repository
Check out the nx-incremental-large-repo for a live example.