Набор плагинов сборки данных для BEM сайтов.
Модуль сборки данных для bem сайтов.
Пакет устанавливается как обычная npm зависимость:
$ npm install --save gorshochek
Простой запуск сборки путем последовательного выполнения всех необходимых задач: пример.
Запуск с помощью gulp можно посмотреть здесь.
Экземпляр модели можно получить как обычный JavaScript-массив страниц через model.toJSON().
Этот же метод используется при JSON.stringify(model).
Для записей модели с type: "lib" можно сгенерировать страницы версий, документов и блоков
из заранее подготовленных локальных checkout'ов библиотек:
Q()
.then(tasks.core.mergeModels(model, {modelPath: './examples/model.ru.json'}))
.then(tasks.libraries.createLibraryPages(model, {
libsPath: './.cache/libs',
language: 'ru'
}))
.then(tasks.core.saveModel(model));По умолчанию задача ожидает директории вида ./.cache/libs/<library>-<version>.
Checkout можно подключить отдельно через опцию checkoutLibrary.
Модель данных описывается в JSON-файле, который должен содержать массив объектов, каждый из которых представляет собой совокупность мета-данных для определенной страницы сайта. Пример такой структуры приведен ниже:
[
{
"url": "/",
"site": "/",
"title": "БЭМ",
"content": "БЭМ прекрасен"
},
{
"url": "/methodology/",
"site": "/methodology/",
"title": "Методология",
"source": "./examples/bemjson/methodology.ru.bemjson.js",
"type": "bemjson.js"
},
...
] Каждый объект в массиве страниц модели может иметь следующий набор полей:
Url страницы в браузере.
- Тип данных:
String - Обязательное поле
- Должно быть уникальным
- Должно заканчиваться символом
/
Url раздела сайта для страницы
- Тип данных:
String - Обязательное поле
- Должно заканчиваться символом
/
Заголовок страницы. Будет использован при построении меню, хлебных крошек, тега <title> страницы и т. д.
- Тип данных:
String - Обязательное поле
Флаг страницы, при указании которого в false страница будет исключена из сборки.
- Тип данных:
Boolean - Значение по умолчанию:
true
Контент страницы. Может быть использован для страниц, у которых есть небольшой неизменяемый контент.
- Тип данных:
String - Значение по умолчанию: нет
Ccылка на источник, с которого будет загружен контент для страницы. Может быть относительной (относительно рабочей директории проекта) ссылкой на файл локальной файловой системы или http-ресурс.
- Тип данных:
String - Значение по умолчанию: нет
Примеры:
./examples/bemjson/methodology.ru.bemjson.jshttps://github.com/bem-site/gorshochek/README.md
Тип данных страницы, например: bemjson.js. Используется при шаблонизации страниц.
- Тип данных:
String - Значение по умолчанию: нет
Имя BEM-бандла для сборки страниц.
- Тип данных:
String - Значение по умолчанию:
index
Массив тегов для страницы, для которых могут быть построены соответствующие страницы.
- Тип данных:
String[] - Значение по умолчанию:
[]
Задача сборки представляет собой функцию высшего порядка, т. е. возвращающую другую анонимную функцию, без аргументов реализующую логику задачи.
Любая задача сборки, работающая с моделью, должна принимать ее экземпляр в качестве первого аргумента. Кроме того, задача может включать в себя дополнительные опции, которые удобно передать в виде объекта вторым параметром. Для организации задач в виде цепочки промисов возвращаемая анонимная функция должна сама возвращать промис-объект.
Таким образом требования, описанные выше, позволяют записать код простейшей задачи, которая
выводит в консоль параметр name, переданный ей в качестве опции:
module.exports = function(model, options = {}) {
return function() {
console.log('Hello ' + options.name);
return Promise.resolve(model);
}
}Запуск тестов с вычислением покрытия кода:
npm testПроверка синтаксиса кода с помощью ESLint:
npm run lintОсобая благодарность за помощь в разработке:
- Гриненко Владимир (http://github.com/tadatuta)
- Харисов Виталий (https://github.com/vithar)
Разработчик Кузнецов Андрей Серргеевич @tormozz48 Вопросы и предложения присылать по адресу: andrey.kuznetsov48@yandex.ru
