Запуск сборки данных осущствляется командой:
- Для development: node bin/data.js development [-v {0|-n|latest|previous|snapshot_dd:mm:yyyy-hh:mm:ss}]
- Для testing: node bin/data.js testing [-v {0|-n|latest|previous|snapshot_dd:mm:yyyy-hh:mm:ss}]
- Для production: node bin/data.js production -v {0|-n|latest|previous|snapshot_dd:mm:yyyy-hh:mm:ss}
-v
- определяет, то какая версия собранных данных будет активной.
Для production
окружения этот параметр является обязательным.
Если данный параметр не указан, то сборка данных осуществляется полностью, и собранный snapshot становится активным для данного окружения.
Если параметр -v
указан, то сборка будет пропущена, а snapshot соответствующий значению, этого параметра
станет активным для данного окружения.
Для dev
режима это означает, что файлы из папки backups/snapshot_{dd:mm:yyyy-hh:mm:ss}
будут скопированы
в корень папки backups
.
Для режимов testing
и production
файлы из папки соответствующего snapshot-а будут скопированы
в папки названия которых совпадают с выбранным окружением
{config model directory}/snapshot_{dd:mm:yyyy-hh:mm:ss}/* --> {config model directory}/{testing}
{config model directory}/snapshot_{dd:mm:yyyy-hh:mm:ss}/* --> {config model directory}/{production}
Значениями параметра -v могут быть:
- Полное название snapshot-а: 'snapshot_{dd:mm:yyyy-hh:mm:ss}'
- Количество собранных snapshot-ов между целевым snapshot-ом и последней версией собранных данных. Например,
чтобы откатиться на 3 версии собранных данных назад, необходимо запустить сборку данных с параметром
-v -3
. - 0 или 'latest' - установить активным последний собранный snapshot.
- -1 или 'previous' - установить активным предыдущий собранный snapshot.
Сборка snapshot-а проходит в несколько четко выраженных этапов:
На этом этапе происхоходит подключение модуля model/index.js
и соответственно всех подключенных к model/index.js
модулей. Такое подключение возвращает обхект, содержащий 'скелетную' информацию описывающую структуру сайта.
Происходит анализ поключенной модели и определение тех полей, которые не были указаны явно, значениями по умолчанию или вычисляемыми знаениями.
На этом этапе происходит анализ полей source
для каждого узла. Здесь происходит сборка массивов ключенй авторов и тегов
для построения соответствующих страниц. Кроме того, происходит парсинг ссылок на *.md
ресурсы, загрузка содержимого
*.md
файлов и построение ссылок на issues репозитория из которого был загружен файл, а также ссылку на редактирование
загруженного контента c помощью сервиса prose.io.
Если *.md
файл был загружен из ветки репозитория, то ссылка на редактирование prose.io
ведет на редактирование файла из указанной ветки.
Если *.md
файл был загружен из тега репозитория, то ссылка на редактирование файла включает в себя
дефолтную ветку репозитория.
Если дата обновления editDate
не была указано явно, то дата обновления документа вычисляется как
дата последнего коммита загруженного *.md
файла.
На этом шаге происходит загрузка *.json
файла, содержащего информацию по авторам и переводчикам.
Путь к этому файлу указывается как ссылка на файл на github так как она отображается в браузере при
открытии этого файла на github. Сейчас в демонстрационных целях, данный файл раположен прямо в репозитории
bem-site-engine
по пути docs/people/people.json
и путь к этому файлу прописан в конфигурации bem-site-engine:
{
...
"github": {
...,
"people": "https://github.com/bem/bem-site-engine/blob/dev/docs/people/people.json"
},
...
}
К узлам модели, содержащим поля dynamic
в автоматическом режиме достраиваются узлы, соответствующие
определенным авторам, переводичкам и тегам, информация о которых была собрана на шаге
'Анализ и сбор мета-информации, загрузка *.md
ресурсов', а данные по авторам и переводчикам подгружается
из того файла, который был загружен на предыдущем шаге сборки.
Имея собранные данные о всех маршрутах приложения, и указанный в конфиге приложения хост (или хосты) сайта
{
...,
"hosts": {
"en": "http://you-site-host-en",
"ru": "http://you-site-host-ru"
}
}
можно построить файл sitemap.xml
для индексации сайта поисковыми системами. Это и происходит на данном этапе.
Сформированные данные сохраняются в виде 3-х файлов:
-
data.json
- собранная модель для работы сайта. Включает в себя дерево структуры сайта, инфоррмацию по тегам, авторам, и библиотекам блоков, загруженные и распарсенные*.md
ресурсы, а также полную карту маршрутов для сайта. -
marker.json
- файл, который содержит хэш-сумму от собранной структуры данных data.json, а также точную дату сборки. Необходим для выполнения проверок того, что данные были изменены. -
sitemap.xml
- файл для индексирования поисковыми системами.
В зависимости от установленного в параметре -env
окружения, эти 3 файла сохраняются либо локально на
файловую систему в директорию backups/{snapshot_dd:mm:yyyy-hh:mm:ss}
либо выгружаются
на Yandex Disk в директорию {config model directory}/{snapshot_dd:mm:yyyy-hh:mm:ss}
, где
config model directory
- это название директории на Yandex Disk установленное в конфигурации сайта.