Когда я начал изучать методологию БЭМ и инструменты для создания проектов на ней, мне показалось, что это не только как писать, но и какая-то неповоротливая и неделимая комбинация инструментов, которая чисто 'про фронтенд'. Первое впечатление было: "Это всё, конечно, классно, но как это можно использовать в жизни?"
Никаких примеров по тому как подружить full stack БЭМ c чем-то, к сожалению, на момент моего знакомства небыло. Особенно непросто разобраться с этой проблемой тем, кто только-только знакомится с технологиями БЭМ.
Именно для решения этой проблемы, я написал небольшой проект, который показывает как можно подружить источник данных (в данном случае mongodb) и стек технологий БЭМ.
Шаблонный репозиторий для создания своего собственного БЭМ-проекта в связке с mongodb. Содержит самый необходимый, на мой взгляд, функционал, включает пример простейшего скелета приложения с получением, сохранением данных в mongodb и авторизацией пользователей через OAuth 2.0 API Яндекса.
Проект реализован по БЭМ-методологии на priv.js
, собирается ENB-сборщиком.
В Bemongo-stub по умолчанию подключены основные БЭМ-библиотеки:
Здесь я постарался всё написать довольно просто с несколькими роутами, которые показывают принципы работы по получению данных из базы, сохранению в неё, авторизации пользователя, сессией и всем остальным.
Используются:
- Express -- используется для нормального роутинга проекта;
- MongoDB -- хранение данных ресурса (отсюда мы будем всё брать :) ). Использую mongodb в связке с промисами bluebird;
- ENB -- сборщик проекта;
- Passport Yandex -- аутентификация в проекте через OAuth 2.0 API от Яндекс.
По своей сути проект разделён на 2 части:
server
-- вся серверная часть;static
-- блоки и бандлы страниц. Так как, данные будут у нас браться динамически, то для реализации блоков используется priv.js
- Node.js 0.10+ – это программная платформа, основанная на языке JavaScript и позволяющая легко создавать быстрые и масштабируемые сетевые приложения. Или io.js, как альтернатива Node.js.
- Git Bash – для пользователей операционной системы Windows.
Клонируем репозиторий и устанавливаем все необходимые зависимости:
git clone git@github.com:evilj0e/bemongo-stub.git my-bem-project
cd my-bem-project
npm run init # Не используйте права суперпользователя (`root`) при установке npm- и bower-зависимостей.
bower-зависимости устанавливаются при выполнении npm run init
в папку /static/vendors
.
Для работы с OAuth 2.0 API от Яндекс нужно получить токены для вашего экземпляра приложения здесь.
И вставить эти данные в server/lib/passport.js
в строки:
passport.use(new PassportYandex({
clientID: '--- Client ID ---',
clientSecret: '--- Client secret ---',
callbackURL: 'http://localhost:3000/login/callback'
},
function(accessToken, refreshToken, profile, done) {
process.nextTick(function () {
db.upsertUser(profile.id, profile, done);
});
}
));
Собрать проект можно с помощью ENB.
Вызов всех команд enb
возможен собственноручно из папки node_modules/.bin/enb
или можно использовать подготовленные мной шорткаты.
init
-- инициализация проекта и установка всех необходимых зависимостей;
jscs
-- проверяем кодстайл через jscs;
jshint
-- проверяем кодстайл через jshint;
csslint
-- проверяем кодстайл через csslint;
codestyle
-- выполяет проверки jscs, jshint, csslint. Используется в качестве pre-commit hook
;
test
-- пока ничего не делает, потому что нет тестов, но в ближайшем времени они будут;
server
-- сборка проекта и запуск разработческого сервера. Проект будет доступен по адресу http://localhost:3000
;
serverOnly
-- просто запуск разработческого сервера.
После запуска разработческого сервера проект будет доступен по адресу http://localhost:3000
.
Комбинация клавиш Ctrl
+ C
или ⌘
+ C
(для MAC) в активном окне терминала остановит сервер.
Шорткаты вызываются в директории проекта следующим образом:
npm run %command_name%
%command_name%
-- название шортката
- Переписать
controllers/db
; - Написать тесты;
- Интегрировать с CI;
- Сделать нормально логгирование;
- Добавить Helmet;
- Добавить Recluster;
- Добавить пример шаблонизации на клиенте.
- Создаем свой проект на БЭМ
- Собираем статическую страницу на БЭМ
- Справочное руководство по BEMJSON
- Пошаговое руководство по i-bem.js
- borschik — простой, но мощный сборщик файлов текстовых форматов