Сервер-сайд
в терминах БЭМ
Владимир Варанкин
BEMup в рамках YaC 2013, Москва
Кто это?

Разработчик интерфейсов из Я
varankinv@yandex-team.ru

2

Фото: @mursya

/narqo
Node.js сервер-сайд
в терминах БЭМ

3
github.com/bem

Технология

Блок
Методология

Элемент

.info
Модификатор

Уровень переопределения

BEMHTML
4
Node.js + БЭМ
Организация файловой структуры
Организация файловой структуры
PRJ/
src/
manage.py
mysite/
__init__.py
settings.py
wsgi.py
cart/
gallery/
polls/
results/
Пример проекта на

6
Организация файловой структуры
cart/
static/
cart/
images/
background.png
style.css
templates/
cart/
index.html
__init__.py
admin.py
forms.py
models.py
tests.py
urls.py
views.py

Пример проекта на

7
Организация файловой структуры
PRJ/
blocks/
cart/
cart.bemhtml
cart.css
cart.js
gallery/
image/

Пример проекта
по методологии
8
Организация файловой структуры
PRJ/
blocks/
cart/
cart.bemhtml
cart.css
cart.js
cart.node.js
gallery/
image/
Пример проекта
по методологии
9
Node.js + БЭМ
Декларативность
Декларативность
// blocks/logger/logger.node.js
modules.define('logger', function(provide) {
function debug() {
console.log.apply(console, arguments);
}
provide({ debug : debug });
})
Модульная система
github.com/ymaps/modules
11
Декларативность
// blocks/http-request/http-request.node.js
modules.define('http-request', ['logger'], function(provide, logger) {
function doRequest(params) {
logger.debug('Going to request %j', params);
// ...
}
provide(doRequest);
})

12
Декларативность
// bundles/common/common.node.js
modules = require('ym');
require('../../blocks/logger/logger.node.js');
require('../../blocks/http-request/http-request.node.js');
...

13
Node.js + БЭМ
Уровни переопределения
Уровни переопределения
Уровни переопределения
PRJ/
common.blocks/
http-request/
logger/
app.blocks/
cart/
...
16
Уровни переопределения
PRJ/
common.blocks/
http-request/
logger/
cluster/

17
Уровни переопределения
// app.blocks/cluster/cluster.node.js
modules.define(
'cluster',
['logger', 'util', 'config'],
function(provide, logger, util, cfg) {
var Cluster = {
run : function() {},
stop : function() {}
};
provide(Cluster);
})
18
Уровни переопределения
PRJ/
common.blocks/
http-request/
logger/
cluster/
deprecated.blocks/
cluster/
19
Уровни переопределения
// deprecated.blocks/cluster/cluster.node.js
modules.define(
'cluster',
['util'],
function(provide, util, Cluster) {
var newCluster = util.extend(Cluster, {
stop : function() {}
});
provide(newCluster);
})
20
Уровни переопределения
// deprecated.blocks/cluster/cluster.node.js
modules.define(
'cluster',
['util'],
function(provide, util, Cluster) {
var newCluster = util.extend(Cluster, {
stop : function() {}
});
provide(newCluster);
})
21
Уровни переопределения
// deprecated.blocks/cluster/cluster.node.js
modules.define(
'cluster',
['util'],
function(provide, util, Cluster) {
var newCluster = util.extend(Cluster, {
stop : function() {}
});
provide(newCluster);
})
22
Уровни переопределения
// deprecated.blocks/cluster/cluster.node.js
modules.define(
'cluster',
['util'],
function(provide, util, Cluster) {
var newCluster = util.extend(Cluster, {
stop : function() {}
});

Реализация метода
для старых версий Node.js

provide(newCluster);
})
23
Декларативность
// bundles/common/common.node.js
modules = require('ym');
require('../../common.blocks/logger/logger.node.js');
require('../../common.blocks/http-request/http-request.node.js');
require('../../common.blocks/cluster/cluster.node.js');
require('../../deprecated.blocks/cluster/cluster.node.js');
...

24
Node.js + БЭМ
Выделение общих частей в библиотеки
Библиотеки
PRJ/
lib/
common.blocks/
cluster/
http-request/
logger/
...
app.blocks/
cart/

26
Библиотеки
PRJ/
lib/
common.blocks/
cluster/
http-request/
logger/
...
app.blocks/
cart/
logger/
27
Библиотеки
// app.blocks/logger/logger.node.js
modules.define('logger', function(provide) {
var bunyan = require('bunyan'),
logger = bunyan.createLogger({ name : 'myapp' });
provide(logger);
})

28
Библиотеки
// app.blocks/logger/logger.node.js
modules.define('logger', function(provide) {
var bunyan = require('bunyan'),
logger = bunyan.createLogger({ name : 'myapp' });
provide(logger);
})

29
Библиотеки
// app.blocks/logger/logger.node.js
modules.define('logger', function(provide) {
var bunyan = require('bunyan'),
logger = bunyan.createLogger({ name : 'myapp' });
provide(logger);
})

30
Декларативность
// bundles/common/common.node.js
modules = require('ym');
require('../../lib/common.blocks/logger/logger.node.js');
require('../../app.blocks/logger/logger.node.js');
require('../../lib/common.blocks/http-request/http-request.node.js');
require('../../lib/common.blocks/cluster/cluster.node.js');
...

31
Общий модульный метод
разработки веб-приложений

NODE.JS ♥ БЭМ:
модульный фронтенд
32
Node.js + БЭМ

Yet Another Node.js Application done BEM

BEM Node.js Singlepage Javascript

33
Владимир Варанкин
Руководитель группы
разработки общих
интерфейсов

@tvii
narqo

varankinv@yandex-team.ru

34

More Related Content

PDF
Beminar js
PDF
Сайт с нуля на полном стеке БЭМ-технологий
PDF
Вебинар по БЭМ: верстаем веб-страницу
PDF
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"
PDF
bem-components — от методологии до full stack платформы
PDF
JSLab.Сергей Пузанков. "Разработка небольшого проекта c BEM и node.js"
PPT
Презентация к докладу про БЭМ by Mikhail Troshev
 
PDF
Сергей Белов "bem server: система сборки фронтенда"
Beminar js
Сайт с нуля на полном стеке БЭМ-технологий
Вебинар по БЭМ: верстаем веб-страницу
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"
bem-components — от методологии до full stack платформы
JSLab.Сергей Пузанков. "Разработка небольшого проекта c BEM и node.js"
Презентация к докладу про БЭМ by Mikhail Troshev
 
Сергей Белов "bem server: система сборки фронтенда"

Similar to Владимир Варанкин — Сервер-сайд в БЭМ-терминах (Node.js) (6)

PDF
Разработка небольшого проекта c BEM и node.js — Сергей Пузанков
PDF
Сергей Пузанков — Новый Поиск по блогам на bem-node
PDF
Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"
PDF
JavaScript в терминах БЭМ / Владимир Варанкин (Яндекс)
PDF
Документирование блоков. Раскрываем все плюсы — Инна Белая, Яндекс
PDF
Мастер-класс наоборот: вы пишете БЭМ-проект, а мы подсказываем — Евгений Конс...
Разработка небольшого проекта c BEM и node.js — Сергей Пузанков
Сергей Пузанков — Новый Поиск по блогам на bem-node
Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"
JavaScript в терминах БЭМ / Владимир Варанкин (Яндекс)
Документирование блоков. Раскрываем все плюсы — Инна Белая, Яндекс
Мастер-класс наоборот: вы пишете БЭМ-проект, а мы подсказываем — Евгений Конс...
Ad

More from Yandex (20)

PDF
Предсказание оттока игроков из World of Tanks
PDF
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
PDF
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
PDF
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
PDF
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
PDF
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
PDF
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
PDF
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
PDF
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
PDF
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
PDF
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
PDF
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
PDF
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
PDF
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
PDF
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
PDF
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
PDF
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
PDF
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
PDF
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
PDF
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Предсказание оттока игроков из World of Tanks
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Ad

Владимир Варанкин — Сервер-сайд в БЭМ-терминах (Node.js)