پروژهٔ $mol چهار لایهٔ تودرتو دارد: فضای کاری که کلون کردهاید، بستههای داخلش، ماژولهای داخلِ بستهها و فایلهای داخلِ ماژول. این چیدمان به یک پرسشِ عملی پاسخ میدهد: پروژهٔ تازه کجا میرود و تاریخچهاش مالِ کیست. تقریباً هر کاری که ساخت انجام میدهد از همین برمیآید.mam/ فضای کاری — همان MAMِ کلونشده├── .meta.tree فهرست: هر بسته از کدام مخزن├── mol/ بسته — خودِ فریمورک، با مخزنِ گیتِ خودش└── my/ بسته — مالِ شما، با مخزنِ گیتِ خودتان ├── .gitattributes باینریهای ساختهشده را سالم نگه میدارد ├── my.meta.tree فهرستِ پروژههای خودتان └── hello/ پروژه — یک ماژول و مخزنِ گیتِ مستقلِ خودش ├── index.html نقطهٔ ورود (فقط ماژولهای اپ) ├── hello.view.tree نشانهگذاری └── form/ زیرماژول — $my_hello_formدر این صفحه هر خطِ فهرست یک علامتِ سؤال دارد که میگوید چرا آنجاست؛ بخشهای پایینتر همان را با تفصیل میگویند.
پنج گام. فقط گامِ نخست تکرار میشود و سه گامِ آخر را اسکافولدر میتواند برایتان انجام دهد.۱. یک بار فضای کاری را کلون کنید. از این پس هرچه بنویسید داخلِ آن زندگی میکند.1gitclonehttps://github.com/hyoo-ru/mam.git2cdmam۲. بستهٔ خودتان را بسازید. یک پوشهٔ کوتاه — نامتان، شرکتتان، شناسهتان — و مخزنِ گیتِ مستقلِ خودش. ظرفِ همهٔ پروژههایی است که شروع خواهید کرد:1mkdirmy2cdmy3gitinitهمانجا که کد نگه میدارید منتشرش کنید، عمومی یا خصوصی. در همان حال یک .gitattributes با تنها خطِ *-text کنارش بگذارید؛ دلیلش پایینتر، در بخشِ بستهها آمده است.۳. فهرست را اضافه کنید.my/my.meta.tree سیاههٔ پروژههای داخلِ بستهٔ شماست. خالی شروع میشود و برای هر پروژه یک خط میگیرد:1pack hello git \https://github.com/you/hello.gitMAM دقیقاً همانطور میخواندش که .meta.treeِ فضای کاریِ یک سطح بالاتر را؛ پس همکاری که my/ را کلون کند، پروژهها را هم میگیرد.۴. پروژه را با مخزنِ خودش بسازید. پوشه همان کامپوننت است — my/hello/ همان $my_hello — و تاریخچه مالِ خودِ اوست، نه مالِ بستهٔ شما و نه مالِ $mol:1mkdirhello2cdhello3gitinitهمین جدایی، نکتهٔ اصلیِ این چیدمان است: کامیت در my/hello/ به مخزنِ hello میرود، هرگز به my و هرگز به mol.۵. ثبتش کنید. خطِ pack از گامِ ۳ را در my/my.meta.tree بیفزایید تا چکاوتِ تازه از بستهٔ شما پروژه را با نام بیاورد.اسکافولدر هر زمان پس از گامِ دوم، یک ماژولِ کارا برایتان مینویسد:1npxcreate-view-tree-lspmy/hello
MAM را یک بار کلون میکنید و داخل آن کار میکنید. این پوشهای نیست که وابستگیها در آن کپی شوند: هر بسته همانجا چکاوت git خودش را دارد، همراه با تاریخچه، پس میتوانید سورس فریمورک را بخوانید، در آن debugger بگذارید و از همان نسخهٔ کاری یک pull request باز کنید.فایل .meta.tree ریشه همان رجیستریای است که این را ممکن میکند: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.gitوقتی ساخت به $mol_view میرسد و هنوز پوشهٔ mol/ وجود ندارد، نام را همینجا جستوجو میکند و مخزن را کلون میکند. هیچچیز وندور نمیشود و هیچچیز تخت نمیشود.
یک پوشهٔ سطحبالا یک بسته است، و یک بسته یک مخزن git است. بستهٔ خودتان صرفاً پوشهای است که نامش را میگذارید: تا وقتی محلی بماند نیازی به ثبت ندارد، و روزی که بخواهید با نام دریافتش کنید یک خط pack لازم میشود.بستهها تودرتو میشوند. یک بسته میتواند اعلانهای pack مخصوص پوشههای درون خودش را داشته باشد، و MAM آنها را از meta.tree همان پوشهای میخواند که بسته را در خود جا خواهد داد. این سایت در bog/smalljs/ زندگی میکند و مخزنی مستقل است که در bog/bog.meta.tree فهرست شده، و آن فایل خودش درون چکاوت bog/ قرار دارد که در .meta.tree ریشه فهرست شده است.