Projekt $mol ma cztery zagnieżdżone poziomy: workspace, który sklonowałeś, pakiety w środku, moduły w pakietach i pliki w module. Ten układ odpowiada na jedno praktyczne pytanie — gdzie trafia nowy projekt i do kogo należy jego historia — i prawie wszystko, co robi build, z niego wynika.mam/ workspace — sklonowany MAM├── .meta.tree rejestr: który pakiet z którego repozytorium├── mol/ pakiet — sam framework, własne repozytorium gita└── my/ pakiet — twój, twoje repozytorium gita ├── .gitattributes zachowuje zbudowane binaria w całości ├── my.meta.tree rejestr twoich projektów └── hello/ projekt — moduł i własne repozytorium gita ├── index.html punkt wejścia (tylko moduły aplikacji) ├── hello.view.tree znaczniki └── form/ podmoduł — $my_hello_formNa tej stronie każdy wiersz listingu ma znak zapytania z powodem, dla którego tam jest; sekcje niżej mówią to samo szerzej.
Pięć kroków. Powtarza się tylko pierwszy, a trzy ostatnie może wykonać za ciebie scaffolder.1. Sklonuj workspace, raz. Wszystko, co napiszesz od teraz, żyje w środku.1gitclonehttps://github.com/hyoo-ru/mam.git2cdmam2. Załóż własny pakiet. Jeden krótki katalog — twoje imię, twoja firma, twój nick — i własne repozytorium gita. To pojemnik na każdy projekt, który zaczniesz:1mkdirmy2cdmy3gitinitOpublikuj go tam, gdzie trzymasz kod, publicznie albo prywatnie. Przy okazji dołóż .gitattributes z jedną linią *-text; dlaczego — niżej, w sekcji o pakietach.3. Dodaj rejestr.my/my.meta.tree to lista projektów w twoim pakiecie. Zaczyna pusty i dostaje po linii na projekt:1pack hello git \https://github.com/you/hello.gitMAM czyta go tak samo jak .meta.tree workspace'u piętro wyżej, więc kolega, który sklonuje my/, dostanie też projekty.4. Utwórz projekt z własnym repozytorium. Katalog jest komponentem — my/hello/ to $my_hello — a historia należy do niego, nie do twojego pakietu ani do $mol:1mkdirhello2cdhello3gitinitW tym rozdzieleniu tkwi sens układu: commit w my/hello/ idzie do repozytorium hello, nigdy do my i nigdy do mol.5. Wpisz go. Dodaj linię pack z kroku 3 do my/my.meta.tree, a świeży checkout twojego pakietu pobierze projekt po nazwie.Scaffolder napisze ci działający moduł w dowolnym momencie po kroku 2:1npxcreate-view-tree-lspmy/hello
MAM klonujesz raz i pracujesz w środku. To nie jest katalog, do którego kopiowane są zależności: każdy pakiet leży tam jako własny checkout gita, z historią, więc możesz czytać źródła frameworka, wstawić w nie debugger i otworzyć pull request z tej samej kopii roboczej.Główny .meta.tree jest rejestrem, który to umożliwia: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.gitGdy build natrafia na $mol_view, a katalogu mol/ jeszcze nie ma, szuka nazwy tutaj i klonuje repozytorium. Nic nie jest wendorowane i nic nie jest spłaszczane.
Katalog najwyższego poziomu to pakiet, a pakiet to repozytorium git. Twój własny pakiet jest po prostu katalogiem, który nazywasz: dopóki żyje lokalnie, nie potrzebuje rejestracji, a linia pack przyda się w dniu, w którym zechcesz pobierać go po nazwie.Pakiety się zagnieżdżają. Pakiet może nieść własne deklaracje pack dla katalogów w swoim wnętrzu, a MAM czyta je z meta.tree tego katalogu, który będzie zawierał pakiet. Ta strona żyje w bog/smalljs/ i jest osobnym repozytorium, wymienionym w bog/bog.meta.tree, który sam leży w checkoucie bog/ wymienionym w głównym .meta.tree.