Angular 9: Bazel
Angular CLI bietet eine komfortable Abstraktion über diverse Werkzeuge, um ein Angular Projekt zu erstellen und zu bauen.
Typischerweise kommt dabei Webpack zum Einsatz.
Im Kontext von großen, oft dem Vorbild Google folgend als Monorepo strukturierten Anwendungen, entsteht der Bedarf an einem sprachübergreifenden Build-Werkzeug.
Ein solches Werkzeug ist das von Google entwickelte und als OpenSource bereitgestellte Bazel.
Wir beschäftigen uns in diesem Beitrag damit, was Bazel im Kontext von Angular CLI bedeutet.
Bei Bazel handelt es sich um ein Buildsystem von Google, das als OpenSource verfügbar ist. Bazel ist dabei ein öffentliches Pendant zu dem bei Google intern genutzten Blaze Werkzeug. Seit 2015 entwickelt hat Bazel im Oktober 2019 die stabile Version 1.0 erreicht und wurde bereits im Dezember 2019 als 2.0 bereitgestellt.
Im Gegensatz zu den meisten Build-Werkzeugen zeichnet sich Bazel dadurch aus, dass ein kompletter Abhängigkeitsgraph aller Bestandteile des Builds aufgebaut wird.
Das ermöglicht es, dass Bazel bei Änderungen genau bestimmen kann, welche Teile neu gebaut werden müssen, und welche durch die Änderung nicht beeinflusst werden.
Bazel kann dadurch sehr optimierte Builds realisieren, da keine unnötigen Verarbeitungen stattfinden.
Bazel unterstützt darüber hinaus auch Remote-Builder, so dass der Build durch verteilte Agents mit einem Maximum an Parallelität durchgeführt werden kann.
Auch das Caching von Build (Teil-)Ergebnissen kann verteilt erfolgen.
Für Entwickler bedeutet das eine weitere Option, Builds zu beschleunigen und von der Rechenleistung von Cloud-Umgebungen zu profitieren.
Zusammen mit der Möglichkeit sogenannte Build-Rules für jeden Ordner eines Projektes zu spezifizieren ist Bazel damit auch für polyglotte Projekte geeignet.
So kann beispielsweise das in Java entwickelte Backend mit Bazel genauso gebaut werden wie das zugehörige Angular Frontend.
Damit eignet sich Bazel auch, um Projekte mit einem Mono-Repo-Ansatz zu bauen:
Angular Libraries und Anwendungen können, ggf. sogar inklusive Backend, in einem einzelnen git Repository verwaltet und daraus released werden.
Die Integration bei Angular erfolgt über das Angular CLI. Der Entwickler hat somit die Wahl, sowohl den bisherigen Webpack-basierten Build als auch Bazel als Buildwerkzeug zu verwenden. Dabei ist auch die nachträgliche Konfiguration, zum Beispiel für bestehende Projekte, möglich.
Um Bazel für bestehende Projekte zu verwenden, reicht es, Bazel per ng add @angular/bazel
zum Projekt hinzuzufügen.
Um neue Projekte mit Bazel aufsetzen zu können, müssen zunächst die Bazel-Schematics installiert werden:
npm install -g @angular/bazel
.
Unter Verwendung dieser Schematics kann dann eine neue Anwendung mit Bazel aufgesetzt werden:
ng new --collection=@angular/bazel my-new-app
Mit dem so umgestellten Buildsystem können die gewohnten Angular-CLI-Kommandos zum Build verwendet werden.
Benötigen Sie Unterstützung in Ihrem Angular Projekt - von Schulung über Code-Review bis konkreter Unterstützung bei Architektur, Umsetzung oder Migrationen stehen wir für Sie bereit. Sprechen Sie uns unverbindlich an!
Unsere Angular Schulungen: