У $mol-проєкта чотири вкладені рівні: воркспейс, який ви склонували, пакети всередині нього, модулі всередині пакетів і файли всередині модуля. Розкладка відповідає на одне практичне питання — куди класти новий проєкт і кому належить його історія, — і майже все, що робить збірка, випливає з неї.mam/ воркспейс — склонований MAM├── .meta.tree реєстр: який пакет із якого репозиторію├── mol/ пакет — сам фреймворк, свій git-репозиторій└── my/ пакет — ваш, ваш git-репозиторій ├── .gitattributes зберігає зібрані бінарники цілими ├── my.meta.tree реєстр ваших проєктів └── hello/ проєкт — модуль і свій git-репозиторій ├── index.html точка входу (лише в модулів-застосунків) ├── hello.view.tree розмітка └── form/ підмодуль — $my_hello_formНа цій сторінці біля кожного рядка листингу є знак питання з причиною, чому він тут; розділи нижче кажуть те саме докладно.
П'ять кроків. Повторюється лише перший, а останні три за вас може зробити скафолдер.1. Склонуйте воркспейс, один раз. Усе, що ви напишете далі, живе всередині нього.1gitclonehttps://github.com/hyoo-ru/mam.git2cdmam2. Заведіть свій пакет. Одна коротка тека — ваше ім'я, ваша компанія, ваш нік — і власний git-репозиторій. Це контейнер для всіх проєктів, які ви почнете:1mkdirmy2cdmy3gitinitВикладіть його туди, де тримаєте код, публічно чи приватно. Заразом покладіть поруч .gitattributes з єдиним рядком *-text; навіщо — у розділі про пакети нижче.3. Додайте реєстр.my/my.meta.tree — список проєктів усередині вашого пакета. Він починається порожнім і отримує по рядку на проєкт:1pack hello git \https://github.com/you/hello.gitMAM читає його так само, як кореневий .meta.tree рівнем вище, тож колега, який склонував my/, отримає й проєкти.4. Створіть проєкт із власним репозиторієм. Тека і є компонент — my/hello/ це $my_hello, — а історія належить йому, а не вашому пакету й не $mol:1mkdirhello2cdhello3gitinitУ цьому розділенні й сенс розкладки: коміт у my/hello/ іде в репозиторій hello, ніколи не в my і не в mol.5. Пропишіть його. Додайте рядок pack із кроку 3 у 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.