internals - gorod-mechty/gorod-mechty GitHub Wiki
Начало работы: git clone [email protected]:gorod-mechty/gorod-mechty.git cd gorod-mechty npm i
В одной консоли запускаем watcher: npm run watch
В другой — простой http сервер: npm start
После изменений файлов в bin/, content/ и *.blocks/ происходит полная пересборка проекта, результат складывается в output-ru. Пока так достаточно быстро, если сборка будет медленной — можно будет улучшать.
Сайт собирается статически, никакой динамики нет и не предполагается. После сборки output-ru можно выкладывать на сервер.
Описание структуры сайта лежит в content/model.js. Язык у сайта один (и скорее всего и будет один всегда), но возможность локализации оставлена. У каждой страницы есть url, title и source (откуда брать контент).
source по формату — это bemjson или md (по умолчанию). Может быть строкой прямо в model.js, браться по http, с файловой системы (определяется по точке в начале строки). Наверняка этого недостаточно и надо будет расширять источники данных для страниц.
bin/get-data.js
Проходит по модели, вытаскивает данные по http или с файловой системы и складывает всё в папку raw-data
bin/render.js
Превращает контент md/bemjson в контент html и складывает в raw-data. В этих html только кусочки данных страниц, не финальный html.
bin/make.js
Обходит модель, для каждой страницы делает BEMTREE.apply, строя блок root, передавая ему на вход в data все данные, нужные для построения страницы.
BEMJSON полученный от работы BEMTREE передаётся в BEMHTML и он строит финальный файл, который в итоге записывается в output-ru.
root.bemtree строит page
page.bemtree строит остальную страницу, дальше по цепочке.
Надо не забывать в .deps.js прописывать блоки, которые используются в этом блоке.
bemhtml как правило простой, просто задаёт правила перевода bemjson в html. Основная логика построения bemjson из json в bemtree.
Всё реализовано «как-то», можно улучшать в любом месте, если видите, что что-то явно сделано неправильно или жмёт.