Flutter-Monorepo mit Melos
pub publish und Versions-Bumps. Melos verwaltet dieses Dart/Flutter-Monorepo: ein Repo, mehrere Packages, Befehle, die überall auf einmal laufen.
In Packages aufteilen
packages/ ) abgelegt und im Root deklariert. Jedes behält seine eigene pubspec.yaml ; die App referenziert die anderen als Pfadabhängigkeiten , und Melos verknüpft alles lokal:
feature_auth hängt von core_api ab, nie umgekehrt. Der Abhängigkeitsgraph ist explizit, überprüfbar und bricht die Kompilierung, sobald er verletzt wird.
Die melos.yaml-Datei
melos exec führt einen Befehl in jedem Package aus; Filter wie --dir-exists=test oder --diff zielen auf eine Teilmenge ab — beispielsweise nur die seit dem Hauptbranch geänderten Packages , was die CI erheblich beschleunigt.
Bootstrap und Verknüpfung
melos bootstrap (oder melos bs ) ist der Schlüsselbefehl: Er installiert die Abhängigkeiten aller Packages und löst die Pfadabhängigkeiten zwischen ihnen auf. Kein manuelles flutter pub get Package für Package, keine desynchronisierten Versionen mehr. Man führt ihn nach jedem git clone und nach jeder Änderung an pubspec.yaml aus. Die Melos-Dokumentation beschreibt jeden Filter und jeden Hook.
Versionierung und CI
melos version liest die Historie, berechnet den Bump für jedes betroffene Package, aktualisiert die CHANGELOG.md und propagiert die neuen Versionen an abhängige Packages. Ein fix: in core_api erhöht core_api und alles, was davon abhängt, konsistent.
- ›
melos bootstrap→ installiert und verknüpft alles - ›
melos run analyze→ statische Analyse überall - ›
melos run test→ Tests über den gesamten Graphen - ›
melos version→ Bumps + Changelogs aus den Commits
bootstrap , dann analyze , dann test — oft auf die geänderten Packages via --diff=origin/main beschränkt, um nicht bei jedem Push alles erneut durchzuführen.
Ein Monorepo ist nicht nur eine Ordnerstruktur: Es ist das Versprechen, dass eine übergreifende Änderung ein einziger Commit, ein einziger Build, ein einziges Review bleibt. Melos hält dieses Versprechen für Flutter.