Un projet $mol a quatre niveaux imbriqués : l'espace de travail que vous avez cloné, les paquets qu'il contient, les modules dans ces paquets et les fichiers dans un module. Cette disposition répond à une question pratique — où va un nouveau projet et à qui appartient son historique — et presque tout ce que fait la compilation en découle.mam/ espace de travail — le clone de MAM├── .meta.tree registre : quel paquet vient de quel dépôt├── mol/ paquet — le framework lui-même, son propre dépôt git└── my/ paquet — le vôtre, votre propre dépôt git ├── .gitattributes garde intacts les binaires compilés ├── my.meta.tree registre de vos propres projets └── hello/ projet — un module, et un dépôt git à lui ├── index.html point d'entrée (modules applicatifs seulement) ├── hello.view.tree le balisage └── form/ sous-module — $my_hello_formSur cette page, chaque ligne de la liste porte un point d'interrogation avec la raison de sa présence ; les sections plus bas disent la même chose en détail.
Cinq étapes. Seule la première se répète, et le générateur peut faire les trois dernières à votre place.1. Clonez l'espace de travail, une fois. Tout ce que vous écrirez désormais vit à l'intérieur.1gitclonehttps://github.com/hyoo-ru/mam.git2cdmam2. Créez votre propre paquet. Un dossier court — votre nom, votre entreprise, votre pseudo — et un dépôt git à lui. C'est le conteneur de tous les projets que vous commencerez :1mkdirmy2cdmy3gitinitPubliez-le là où vous gardez votre code, en public ou en privé. Ajoutez au passage un .gitattributes avec la seule ligne *-text ; la raison est plus bas, dans la section sur les paquets.3. Ajoutez le registre.my/my.meta.tree est la liste des projets de votre paquet. Il commence vide et gagne une ligne par projet :1pack hello git \https://github.com/you/hello.gitMAM le lit exactement comme le .meta.tree de l'espace de travail un niveau au-dessus, si bien qu'un collègue qui clone my/ récupère aussi les projets.4. Créez le projet, avec un dépôt à lui. Le dossier est le composant — my/hello/ c'est $my_hello — et son historique lui appartient, pas à votre paquet ni à $mol :1mkdirhello2cdhello3gitinitCette séparation est tout l'intérêt de la disposition : un commit dans my/hello/ va au dépôt hello, jamais à my ni à mol.5. Déclarez-le. Ajoutez la ligne pack de l'étape 3 dans my/my.meta.tree, et un clone frais de votre paquet récupérera le projet par son nom.Le générateur vous écrit un module fonctionnel à tout moment après l'étape 2 :1npxcreate-view-tree-lspmy/hello
Vous clonez MAM une fois et vous travaillez dedans. Ce n'est pas un dossier où les dépendances sont copiées : chaque paquet y est un clone git à part entière, avec son historique, si bien que vous pouvez lire les sources du framework, y placer un debugger et ouvrir une pull request depuis la même copie de travail.Le .meta.tree racine est le registre qui rend cela possible :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.gitQuand le build rencontre $mol_view et qu'aucun dossier mol/ n'existe encore, il cherche le nom ici et clone le dépôt. Rien n'est vendorisé et rien n'est aplati.