Monorepository mit JavaScript: Code-Organisation für Anfänger

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Monorepository mit JavaScript: Code-Organisation für Anfänger

Mit dem Wachstum eines Projekts und dem Auftauchen gemeinsamer Logik, die in verschiedenen Teilen der Anwendung wiederverwendet werden muss, stehen Entwickler vor dem Problem der Code-Organisation. Viele beginnen damit, Dateien zu kopieren, separate npm-Pakete oder verworrene Module zu erstellen. Die Lösung für dieses Problem ist ein Monorepository (Monorepo). In diesem Artikel werden wir uns ansehen, was ein Monorepository ist, warum es im JavaScript-Ökosystem (Node.js) benötigt wird und wie man es mit gängigen Tools einrichtet. Der Artikel richtet sich an Anfänger-Entwickler, die bereits mit den Grundlagen von Node.js und npm vertraut sind.



Was ist ein Monorepository und warum wird es benötigt?

Ein Monorepository ist ein Ansatz zur Code-Organisation, bei dem alle Projekte, Bibliotheken und Dienste in einem einzigen Repository (z. B. auf GitHub) gespeichert werden. Im Gegensatz zu einem Multirepository (Multirepo), bei dem jedes Projekt sein eigenes Repository hat, vereint ein Monorepository alles an einem Ort.

Die wichtigsten Vorteile:

  • Einheitliche Versionskontrolle: Einfachere Verwaltung von Änderungen, die mehrere Pakete betreffen.
  • Wiederverwendung von Code: Gemeinsame Hilfsprogramme, Typen und Konfigurationen sind nahe beieinander und erfordern keine Veröffentlichung in npm.
  • Vereinfachtes Refactoring: Änderungen in einem Paket werden automatisch zusammen mit anderen getestet.
  • Einheitliches Build und Testen: Tests für alle Pakete können mit einem einzigen Befehl ausgeführt werden.

Allerdings hat ein Monorepository auch Nachteile: Es kann zu groß werden und die Abhängigkeitsverwaltung kann komplex werden. Zur Lösung dieser Probleme gibt es spezielle Werkzeuge.



Tools für die Arbeit mit Monorepositorys in JavaScript

Im Node.js-Ökosystem gibt es mehrere beliebte Tools zur Verwaltung von Monorepositorys. Wir werden uns die beiden gängigsten ansehen: NPM Workspaces (in npm integriert) und Lerna.

NPM Workspaces

Ab npm Version 7 gibt es eine integrierte Unterstützung für Monorepositorys über workspaces. Dies ist eine einfache und leichte Möglichkeit, Code zu organisieren, ohne zusätzliche Pakete installieren zu müssen.

Für die Einrichtung reicht es, eine root package.json zu erstellen und darin die Ordner mit den Paketen anzugeben:

// package.json (root){  "name": "my-monorepo",  "private": true,  "workspaces": [    "packages/*"  ]}

Erstellen Sie dann die Ordnerstruktur:

my-monorepo/├── package.json├── packages/│   ├── utils/│   │   ├── package.json│   │   └── index.js│   └── app/│       ├── package.json│       └── index.js

Wenn nun das Paket app von utils abhängt, können Sie es einfach in den Abhängigkeiten angeben:

// packages/app/package.json{  "name": "@my/app",  "dependencies": {    "@my/utils": "*"  }}

Nach der Ausführung von npm install im Stammverzeichnis des Projekts erstellt npm symbolische Links zwischen den Paketen. Das bedeutet, dass Sie beide Pakete gleichzeitig entwickeln können und Änderungen in utils sofort in app verfügbar sind.



Lerna

Lerna ist ein leistungsfähigeres Tool, das oft zusammen mit NPM Workspaces oder Yarn Workspaces verwendet wird. Es bietet Funktionen zum Veröffentlichen von Paketen, zur Versionierung und zur Ausführung von Befehlen in allen Paketen.

Installation von Lerna:

npm install -g lerna

Erstellung der Konfiguration:

lerna init

Dies erstellt eine Datei lerna.json und eine grundlegende Struktur. Beispielkonfiguration:

// lerna.json{  "version": "0.0.0",  "packages": ["packages/*"],  "npmClient": "npm"}

Lerna ermöglicht es, Befehle in allen Paketen auszuführen:

lerna run testlerna run build

Und auch die Versionen der Pakete zu verwalten.

Blogs

Buchempfehlungen