Ein $mol-Projekt hat vier verschachtelte Ebenen: den Workspace, den Sie geklont haben, die Pakete darin, die Module in den Paketen und die Dateien in einem Modul. Die Aufteilung beantwortet eine praktische Frage — wohin ein neues Projekt gehört und wem seine Historie gehört — und fast alles, was der Build tut, folgt daraus.mam/ Workspace — der geklonte MAM-Checkout├── .meta.tree Registry: welches Paket aus welchem Repository├── mol/ Paket — das Framework selbst, eigenes git-Repository└── my/ Paket — Ihres, Ihr eigenes git-Repository ├── .gitattributes hält gebaute Binärdateien unversehrt ├── my.meta.tree Registry Ihrer eigenen Projekte └── hello/ Projekt — ein Modul und ein eigenes git-Repository ├── index.html Einstiegspunkt (nur App-Module) ├── hello.view.tree das Markup └── form/ Untermodul — $my_hello_formAuf dieser Seite trägt jede Zeile der Auflistung ein Fragezeichen mit dem Grund, warum sie dort steht; die Abschnitte weiter unten sagen dasselbe ausführlich.
Fünf Schritte. Nur der erste wiederholt sich, und die letzten drei kann der Scaffolder für Sie erledigen.1. Den Workspace einmal klonen. Alles, was Sie ab jetzt schreiben, liegt darin.1gitclonehttps://github.com/hyoo-ru/mam.git2cdmam2. Ein eigenes Paket anlegen. Ein kurzer Ordner — Ihr Name, Ihre Firma, Ihr Handle — und ein eigenes git-Repository. Es ist der Container für jedes Projekt, das Sie beginnen:1mkdirmy2cdmy3gitinitVeröffentlichen Sie es dort, wo Sie Code halten, öffentlich oder privat. Legen Sie gleich eine .gitattributes mit der einen Zeile *-text dazu; warum, steht weiter unten im Abschnitt über Pakete.3. Die Registry hinzufügen.my/my.meta.tree ist die Liste der Projekte in Ihrem Paket. Sie beginnt leer und bekommt pro Projekt eine Zeile:1pack hello git \https://github.com/you/hello.gitMAM liest sie genauso wie die .meta.tree des Workspace eine Ebene höher, sodass eine Kollegin, die my/ klont, auch die Projekte bekommt.4. Das Projekt anlegen, mit eigenem Repository. Der Ordner ist die Komponente — my/hello/ ist $my_hello — und seine Historie gehört ihm, nicht Ihrem Paket und nicht $mol:1mkdirhello2cdhello3gitinitGenau diese Trennung ist der Sinn der Aufteilung: ein Commit in my/hello/ geht ins Repository hello, nie nach my und nie nach mol.5. Es eintragen. Fügen Sie die pack-Zeile aus Schritt 3 in my/my.meta.tree ein, und ein frischer Checkout Ihres Pakets holt das Projekt beim Namen.Der Scaffolder schreibt Ihnen jederzeit nach Schritt 2 ein lauffähiges Modul:1npxcreate-view-tree-lspmy/hello
Sie klonen MAM einmal und arbeiten darin. Es ist kein Ordner, in den Abhängigkeiten kopiert werden: jedes Paket liegt dort als eigener git-Checkout, mit Historie, sodass Sie den Quellcode des Frameworks lesen, einen debugger hineinsetzen und aus derselben Arbeitskopie einen Pull Request öffnen können.Die .meta.tree im Wurzelverzeichnis ist die Registry, die das möglich macht:1pack mol git \https://github.com/hyoo-ru/mam_mol.git2pack hyoo git \https://github.com/hyoo-ru/mam_hyoo.git3pack lib git \https://github.com/hyoo-ru/mam_lib.gitWenn der Build auf $mol_view trifft und es noch keinen mol/-Ordner gibt, schlägt er den Namen hier nach und klont das Repository. Nichts wird vendored und nichts wird flachgeklopft.