$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코드를 보관하는 곳에 공개든 비공개든 올려두세요. 겸사겸사 *-text 한 줄만 담은 .gitattributes를 같이 두세요. 이유는 아래 패키지 절에 있습니다.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. 등록합니다. 3단계의 pack 줄을 my/my.meta.tree에 넣으면, 패키지를 새로 체크아웃할 때 이름으로 프로젝트를 가져옵니다.2단계 이후라면 언제든 스캐폴더가 동작하는 모듈을 대신 써 줍니다:1npxcreate-view-tree-lspmy/hello
MAM은 한 번 클론해 두고 그 안에서 작업합니다. 의존성이 복사되어 들어오는 폴더가 아닙니다. 모든 패키지가 자기 git 체크아웃으로, 히스토리를 지닌 채 거기에 놓여 있으므로, 프레임워크의 소스를 읽고 거기에 debugger를 넣고 같은 작업 사본에서 풀 리퀘스트를 열 수 있습니다.루트의 .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에 등재되어 있습니다. 그리고 그 파일은 루트 .meta.tree에 등재된 bog/ 체크아웃 안에 있습니다.