© vectorpouch/Shutterstock.com
PHP Magazin
Monorepos: Ein Konzept zur Verwaltung komplexer Codebasen

Ab ins Repository!

Monorepos ist keine neue Erfindung. Die Ansätze werden von großen Unternehmen wie Facebook und Google zur Verwaltung komplexer Codebasen genutzt. Doch was steckt hinter dem Begriff Monorepos? Welche Vor- und Nachteile bringt dieses Konzept mit, was gibt es bei der Umsetzung zu beachten und welche Werkzeuge können Sie bei der Entwicklung unterstützen?

Sebastian Springer


Die Idee von Monorepos ist nicht neu. Große Unternehmen wie Facebook, Google oder Twitter nutzen diesen Ansatz, um große Codebasen zu verwalten. Aber auch im kleineren Umfang setzen sich Monorepos zunehmend durch. Gerade Bei Open-Source-Projekten erfreuen sich Monorepos zunehmender Beliebtheit. Ein populäres Beispiel einer Applikation, die auf ein Monorepo setzt, ist Yarn, der JavaScript-Package-Manager von Facebook. Um diesem Trend zu folgen, müssen Sie jedoch schon ein bisschen mehr tun als nur Ihren Quellcode in ein riesiges Repository zu stecken. Was genau die Gründe sind, die für ein Monorepo sprechen, was Sie dabei beachten müssen und welche Werkzeuge Sie bei der Entwicklung unterstützen, sehen wir uns im Zuge dieses Artikels an. Anhand einer kleinen Beispielapplikation in JavaScript sehen Sie, wie sich die Konzepte und Lösungsansätze in der Praxis umsetzen lassen. Doch zunächst zur Frage: Was ist denn ein Monorepo?

Was steckt hinter dem Begriff?

Im Begriff Monorepo steckt eigentlich schon alles, was Sie wissen müssen. Beim Konzept von Monorepos wird die gesamte Codebasis in einem Repository verwaltet. Am besten lässt sich dieser Ansatz anhand eines praktischen Beispiels zeigen. Ein Projekt, das auf einem Monorepo aufbaut, ist Jest, das JavaScript-Testframework von Facebook. Werfen Sie einen Blick in das GitHub-Repo des Projekts, fällt auf den ersten Blick das Verzeichnis packages auf. Die übrige Projektstruktur gleicht überwiegend einem Standardprojekt. Im packages-Verzeichnis finden Sie eine ganze Reihe weiterer Verzeichnisse. Diese Pakete stellen die einzelnen Bestandteile vom Core-Paket über das CLI bis hin zum Mock-Paket des Projekts dar.

Natürlich ist es sinnvoll, in einem Monorepo zusammengehörige Pakete zu gruppieren, es ist jedoch nicht verpflichtend. So haben Sie auch die Möglichkeit, thematisch vollständig getrennte Projekte in einem Monorepo zu verwalten. Dieser Ansatz wird jedoch in den meisten Fällen für interne Projekte verfolgt. Bei öffentlichen Projekten wird darauf geachtet, das Monorepo so zu dimensionieren, dass es die gesamte Codebasis des Projekts umfasst.

Ein Monorepo ist leicht als solches zu erkennen, wenn es über eine Paketstruktur wie Jest verfügt und diese Pakete als weitestgehend eigenständige Subprojekte verwaltet werden. Im Fall von Jest weist jedes Paket eine eigene package.json- und readme-Datei auf. Auch die Unit-Tests liegen hier in den jeweiligen Paketen.

Monorepos bedeuten keine Abkehr von modularen Architekturen od...

PHP Magazin
Monorepos: Ein Konzept zur Verwaltung komplexer Codebasen

Ab ins Repository!

Monorepos ist keine neue Erfindung. Die Ansätze werden von großen Unternehmen wie Facebook und Google zur Verwaltung komplexer Codebasen genutzt. Doch was steckt hinter dem Begriff Monorepos? Welche Vor- und Nachteile bringt dieses Konzept mit, was gibt es bei der Umsetzung zu beachten und welche Werkzeuge können Sie bei der Entwicklung unterstützen?

Sebastian Springer


Die Idee von Monorepos ist nicht neu. Große Unternehmen wie Facebook, Google oder Twitter nutzen diesen Ansatz, um große Codebasen zu verwalten. Aber auch im kleineren Umfang setzen sich Monorepos zunehmend durch. Gerade Bei Open-Source-Projekten erfreuen sich Monorepos zunehmender Beliebtheit. Ein populäres Beispiel einer Applikation, die auf ein Monorepo setzt, ist Yarn, der JavaScript-Package-Manager von Facebook. Um diesem Trend zu folgen, müssen Sie jedoch schon ein bisschen mehr tun als nur Ihren Quellcode in ein riesiges Repository zu stecken. Was genau die Gründe sind, die für ein Monorepo sprechen, was Sie dabei beachten müssen und welche Werkzeuge Sie bei der Entwicklung unterstützen, sehen wir uns im Zuge dieses Artikels an. Anhand einer kleinen Beispielapplikation in JavaScript sehen Sie, wie sich die Konzepte und Lösungsansätze in der Praxis umsetzen lassen. Doch zunächst zur Frage: Was ist denn ein Monorepo?

Was steckt hinter dem Begriff?

Im Begriff Monorepo steckt eigentlich schon alles, was Sie wissen müssen. Beim Konzept von Monorepos wird die gesamte Codebasis in einem Repository verwaltet. Am besten lässt sich dieser Ansatz anhand eines praktischen Beispiels zeigen. Ein Projekt, das auf einem Monorepo aufbaut, ist Jest, das JavaScript-Testframework von Facebook. Werfen Sie einen Blick in das GitHub-Repo des Projekts, fällt auf den ersten Blick das Verzeichnis packages auf. Die übrige Projektstruktur gleicht überwiegend einem Standardprojekt. Im packages-Verzeichnis finden Sie eine ganze Reihe weiterer Verzeichnisse. Diese Pakete stellen die einzelnen Bestandteile vom Core-Paket über das CLI bis hin zum Mock-Paket des Projekts dar.

Natürlich ist es sinnvoll, in einem Monorepo zusammengehörige Pakete zu gruppieren, es ist jedoch nicht verpflichtend. So haben Sie auch die Möglichkeit, thematisch vollständig getrennte Projekte in einem Monorepo zu verwalten. Dieser Ansatz wird jedoch in den meisten Fällen für interne Projekte verfolgt. Bei öffentlichen Projekten wird darauf geachtet, das Monorepo so zu dimensionieren, dass es die gesamte Codebasis des Projekts umfasst.

Ein Monorepo ist leicht als solches zu erkennen, wenn es über eine Paketstruktur wie Jest verfügt und diese Pakete als weitestgehend eigenständige Subprojekte verwaltet werden. Im Fall von Jest weist jedes Paket eine eigene package.json- und readme-Datei auf. Auch die Unit-Tests liegen hier in den jeweiligen Paketen.

Monorepos bedeuten keine Abkehr von modularen Architekturen od...

Neugierig geworden?


   
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang