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.


Всё реализовано «как-то», можно улучшать в любом месте, если видите, что что-то явно сделано неправильно или жмёт.