Die Frameworks Nx & Co erleichtern uns die Verwaltung von Monorepos (Mono-Repositories).
Doch welche eignen sich am besten in Bezug auf die Performanz und Funktionalität?
Einleitung
Mit zunehmender Komplexität von Projekten kann die steigende Anzahl von Repositories und Dependencies schnell dazu führen, dass die Verwaltung des Codes unübersichtlich und fehleranfällig wird. Der wesentliche Grund dafür ist, dass jedes Repository bei einer zentralen Änderung jeweils auf den aktuellen Stand gebracht werden muss.
Monorepos schaffen gegen diese Probleme Abhilfe, da der gesamte Code in einem einzigen Repository gelagert wird. Dadurch werden zum einen Updates von Abhängigkeiten sowie zum anderen die Verwaltung erleichtert, indem relevante Änderungen über eine zentrale Instanz angesteuert werden.
Aus diesen Gründen haben sich Monorepos zu einem attraktiven Feature im Frontend-Bereich entwickelt und die Anzahl an passenden Frameworks nimmt stets zu. Doch durch diese breit gefächerte Auswahl an Frameworks kann man als Entwickler:in rasch die Übersicht verlieren. Im Folgenden wird daher veranschaulicht, welche aktuell beliebten Frontend Monorepo Frameworks in Hinsicht auf ihre Performanz und auch das Angebot an Funktionalitäten für welchen Use Case zu empfehlen sind.
State of the Art

Von 2017 bis zum Anfang des Jahres 2022 konnte das Framework Lerna als Vorreiter die höchsten Downloadzahlen über npm verzeichnen. Doch in den Jahren ab 2020 gewannen auch Frontend Monorepo Frameworks wie Rush, Bit, Nx und Turborepo immer mehr Aufmerksamkeit. Im Mai 2022 wurde Lerna schlussendlich von der Firma Nrwl übernommen und bietet seither die Möglichkeit, Nx und Lerna gemeinsam durch einfache Konfigurationen zu nutzen. Das hat auch zur Folge, dass sich Nx ab diesem Zeitpunkt zum meistgenutzten Framework entwickelt und den Abstand zur Konkurrenz weiter ausbaut.
Währenddessen sprechen die Downloadzahlen von Turborepo ebenfalls für eine große Beliebtheit in der Gemeinschaft von Entwickler:innen. Dabei hat Turborepo Ende 2022 auch gleich Rush überholt. Aufgrund der separat bereitgestellten Versionsverwaltung von Bit und Bazel lassen sich in diesem Zusammenhang keine vergleichbaren Zahlen bestimmen – die direkten Downloads über npm sind für dieses Framework in Relation allerdings sehr gering.
Demnach gibt es einen klaren Trend zur Verwendung von Nx (oft im Zusammenspiel mit Lerna). Ebenfalls erkennbar ist ein Anstieg der Downloadzahlen von Turborepo, das momentan deutlich an Beliebtheit gewinnt. Ebenso verzeichnet Rush seit Release einen relativ konstanten Anstieg, weist aber in Relation niedrigere Downloadzahlen auf.
Evaluation der Frontend Monorepo Frameworks
Welche Frameworks wurden evaluiert?
Da viele Frontend Monorepo Frameworks mit unterschiedlichen Herangehensweisen und Funktionen einhergehen, werden im Folgenden vier bekannte Frameworks genauer untersucht, um das Spektrum der Framework-Arten weitestgehend abzudecken.
Wir haben uns für diese vier Frameworks entschieden:
- Nx
- Bit
- Rush
- Turborepo
Welche Aspekte wurden bei der Evaluation betrachtet?
Bei der Betrachtung liegt der Fokus auf der Performanz, der Funktionalität und dem Funktionsumfang. Einerseits erhofft man sich als Entwickler:in schnellere Prozesse bei gleichzeitig minimaler Beanspruchung der Ressourcen, andererseits sollen die Frameworks Entwickler:innen dabei helfen, ihrer Arbeit und Organisation in einem Monorepo so schnell und unkompliziert wie möglich nachgehen zu können.
Um die definierten Kriterien anschließend auswerten zu können, werden diverse Experimente in Projektumgebungen durchgeführt. Zum einen wird dafür ein rudimentäres Demo-Projekt erstellt, in dem zwei Buttons zur Interaktion bereitstehen. Zum anderen findet die Evaluation der Frontend Monorepo Frameworks auch am komplexeren Projekt inovex-elements statt, das sich mit der Entwicklung und Bereitstellung von Web Components beschäftigt.
Alle Kriterien auf einen Blick:
- Performanz
- Build-Zeit
- Test-Zeit
- Durchschnittliche CPU-Auslastung
- Durchschnittliche Arbeitsspeichernutzung
- Zeitliche Skalierung
- Datengröße der Abhängigkeiten
- Funktionalitäten
- Setup-Templates (Vorgefertigte Dateien und Konfigurationen beim Erstellen von Komponenten generieren)
- Automatische Workspace-Registrierung (Neue oder bestehende Workspaces automatisch registrieren und integrieren)
- Automatische Abhängigkeitserkennung (Einzelne Workspaces und ihre Verhältnisse zueinander automatisch aufbauen)
- Darstellung von Abhängigkeitsgraphen (Workspaces und deren Komponenten darstellen)
- Framework-spezifische Plugins und Extensions (Bereitgestellte vordefinierte Konfigurationen für eine Reihe von Werkzeugen)
- Benutzerdefinierte Plugins und Extensions (Möglichkeit, selbst Plugins und Extensions entwerfen zu können, um spezielle Anwendungsfälle abzudecken)
- Package-Veröffentlichung (Möglichkeit, Release-Art des erstellten Packages zu bestimmen und Changelog zu generieren)
- Cache-Bereinigung (Möglichkeit, alle Cache-Einträge automatisiert über die Konsole entfernen)
Ergebnisse
Die nachfolgenden beiden Tabellen stellen das Ranking in Bezug auf die Performanz in den eingangs erwähnten Projektarten dar. Hierbei wurden jeweils mehrere Durchläufe pro Kategorie durchgeführt und die ermittelten Zeiten und Werte zwischen den evaluierten Frameworks ins Verhältnis gesetzt. Daraus resultieren verschiedene Ränge, die repräsentieren, wie gut ein Framework in Relation zu den anderen abgeschnitten hat.
Um die absoluten Werte der Kategorien Ohne Caching und Mit Caching zu erhalten, wurde das zeitliche Verhalten für Build- und Testprozesse in den entsprechenden Frameworks jeweils ohne und mit dem Zwischenspeichern der bisherigen Durchläufe gemessen. Um anschließend die Bewertung für die Kategorie Caching-Relation zu erhalten, wurden die prozentualen zeitlichen Einsparungen zwischen Durchläufen ohne und mit Caching betrachtet.
Der bestmögliche Rang wird hierbei durch eine 1 gekennzeichnet, der schlechteste mit einer 4.
Performanz-Ranking im Demo-Projekt
Kategorie | Nx | Bit | Rush | Turbo |
---|---|---|---|---|
Ohne Caching | 3 | 1 | 3 | 2 |
Mit Caching | 3 | 3 | 1 | 2 |
Caching-Relation | 2 | 4 | 1 | 2 |
Rang | 3 | 3 | 1 | 2 |
Performanz-Ranking im Projekt inovex-elements
Kategorie | Nx | Bit | Rush | Turbo |
---|---|---|---|---|
Ohne Caching | 3 | - | 1 | 1 |
Mit Caching | 3 | - | 1 | 2 |
Caching-Relation | 3 | - | 2 | 1 |
Rang | 3 | - | 1 | 1 |
Eine wichtige Anmerkung zu dieser Tabelle: Das Frontend Monorepo Framework Bit legt den Fokus seit 2020 auf die Bibliothek Lit. Im Projekt inovex-elements wird jedoch die Bibliothek Stencil verwendet, für die Bit keine Anbindung mehr bereitstellt. Aufgrund der entstehenden Heterogenität durch das Umschreiben des Codes für Lit wurde dieses Framework entsprechend nicht in diesem Projekt evaluiert.
Bereitgestellte Funktionen der Frameworks
Funktion | Nx | Bit | Rush | Turbo |
---|---|---|---|---|
Setup-Templates | ✓ | ✓ | ✗ | ✗ |
Automatische Workspaceregistrierung | ✗ | ✗ | ✗ | ✓ |
Automatische Abhängigkeitserkennung | ✓ | ✓ | ✓ | ✗ |
Abhängigkeitsgraph | ✓ | ✓ | ✗ | ✓ |
Frameworkspezifische Plugins und Extensions | ✓ | ✓ | ✓ | ✗ |
Benutzerdefinierte Plugins und Extensions | ✓ | ✓ | ✓ | ✗ |
Package-Veröffentlichung | ✗ | ✓ | ✓ | ✗ |
Befehl zur Cache-Bereinigung | ✓ | ✓ | ✓ | ✗ |
Anzahl bereitgestellter Funktionen | 6 | 7 | 5 | 2 |
Fazit
Natürlich kann die folgende Empfehlung nicht auf alle Projekte angewandt werden, da sich diese untereinander stark unterscheiden können und sich manche Frontend Monorepo Frameworks daher in bestimmten Fällen besser eignen als andere. Nichtsdestotrotz lassen sich durch die Evaluation der Frameworks in den beiden Projekten Muster erkennen, die darauf hindeuten, dass sich diese Frameworks hinsichtlich der Kriterien der Performanz und der Funktionalität eher eignen:
Rush weist in Bezug auf die Performanz die besten Ergebnisse für beide Projektarten auf und ist somit klar zu empfehlen, wenn es darum geht, Prozesse bei minimalem Ressourcenanspruch möglichst schnell und mit einer guten Skalierung durchzuführen. Zudem bietet es einen Großteil an erwarteten Funktionen, die je nach Bedarf auch auf Wünsche der Entwickler:innen angepasst werden können.
Turborepo ist eine gute Alternative zu Rush, die ebenfalls gute Ergebnisse erzielt – auch wenn diese im direkten Vergleich etwas schlechter ausgefallen sind. Der Grund, Rush jedoch präferiert zu nutzen, sind die Funktionen, die bei Turborepo bisher spärlich vorhanden sind und wenig Konfigurationen zulassen.
Nx sollte die erste Wahl sein, falls der Wunsch besteht, ein großes Spektrum an Funktionen zur Verfügung stehen zu haben, das nicht nur das Entwickeln und die Verwaltung eines Monorepos vereinfacht, sondern auch dabei hilft, Wissen leicht zu verbreiten und anderen Kolleg:innen den Einstieg und die Zusammenarbeit zu erleichtern.
Das Framework bietet die Mehrheit an erwarteten Funktionen mit umfassenden und verständlichen Dokumentationen sowie Anleitungen, welche die Arbeit mit Nx sehr angenehm gestalten.
Bit bietet als Alternative zu Nx zwar eine leicht größere Funktionsauswahl und Konfigurationsmöglichkeiten, diese führen aufgrund ihrer Komplexität und der teils unübersichtlichen und nur zum Teil gepflegten Dokumentation oftmals dazu, dass die Inbetriebnahme von einfachen kleinen Projekten deutlich mehr Zeit in Anspruch nimmt. Das schlägt sich besonders in größeren Projekten gravierend nieder.