27. Нововведения
новый формат make.js
менеджер и конструктор уровней
сборка страниц с плоской схемой именования
слабые суффиксы для технологий
автоматическая проверка обновлений
8
28. Нововведения
новый формат make.js
менеджер и конструктор уровней
сборка страниц с плоской схемой именования
слабые суффиксы для технологий
автоматическая проверка обновлений
сбор статистики
8
33. Как?
npm-пакет с именем вида bem-<подкоманда>
должен быть установлен рядом с bem-tools
bem-tools должен быть добавлен в peerDependencies
10
34. Как?
npm-пакет с именем вида bem-<подкоманда>
должен быть установлен рядом с bem-tools
bem-tools должен быть добавлен в peerDependencies
используется COA bit.ly/BEMUP_COA
10
35. Как?
npm-пакет с именем вида bem-<подкоманда>
должен быть установлен рядом с bem-tools
bem-tools должен быть добавлен в peerDependencies
используется COA bit.ly/BEMUP_COA
доступен шаблон проекта. bit.ly/BEMUP_COMMAND
10
36. Пример
Пакет bem-hello
var Q = require('q');
module.exports = function(BEM) {
return this.title('hello world command')
.act(function() {
return Q.resolve('Hello, world!');
});
};
11
43. Проблемы
Базовый уровень = схема именования + список технологий
Технологии V1 по умолчанию
Полные пути ко всем внешним технологиям
15
44. Проблемы
Базовый уровень = схема именования + список технологий
Технологии V1 по умолчанию
Полные пути ко всем внешним технологиям
Необходимость вызова __base()
15
45. В bem-tools 1.0.0
module.exports = function (BEM) {
return BEM.defineLevel()
.setNamingScheme('simple')
.addTechs('css', 'js', 'someTech')
.createClass();
};
16
46. В bem-tools 1.0.0
Раздельное задание технологий и схемы именования
module.exports = function (BEM) {
return BEM.defineLevel()
.setNamingScheme('simple')
.addTechs('css', 'js', 'someTech')
.createClass();
};
16
47. В bem-tools 1.0.0
Раздельное задание технологий и схемы именования
Автоматический поиск путей к модулям технологий
module.exports = function (BEM) {
return BEM.defineLevel()
.setNamingScheme('simple')
.addTechs('css', 'js', 'someTech')
.createClass();
};
16
48. В bem-tools 1.0.0
Раздельное задание технологий и схемы именования
Автоматический поиск путей к модулям технологий
Только V2 технологии
module.exports = function (BEM) {
return BEM.defineLevel()
.setNamingScheme('simple')
.addTechs('css', 'js', 'someTech')
.createClass();
};
16
49. Поиск путей к технологиям
module.exports = function (BEM) {
return BEM.defineLevel()
.useNpmPackage('bem-techs-core')
.addTechs('project.js', 'css', 'js', 'bemhtml')
.createClass();
};
17
50. Поиск путей к технологиям
В $PROJECT_ROOT/.bem/techs
module.exports = function (BEM) {
return BEM.defineLevel()
.useNpmPackage('bem-techs-core')
.addTechs('project.js', 'css', 'js', 'bemhtml')
.createClass();
};
17
51. Поиск путей к технологиям
В $PROJECT_ROOT/.bem/techs
В npm-пакетах
module.exports = function (BEM) {
return BEM.defineLevel()
.useNpmPackage('bem-techs-core')
.addTechs('project.js', 'css', 'js', 'bemhtml')
.createClass();
};
17
52. Поиск путей к технологиям
В $PROJECT_ROOT/.bem/techs
В npm-пакетах
V2 технологии bem-tools
module.exports = function (BEM) {
return BEM.defineLevel()
.useNpmPackage('bem-techs-core')
.addTechs('project.js', 'css', 'js', 'bemhtml')
.createClass();
};
17
53. Явное задание путей
Все также возможно
module.exports = function (BEM) {
return BEM.defineLevel()
.addTechs({
'css': '/path/to/css',
'js': '/path/to/js'
})
.createClass();
};
18
54. Наследование
Нет необходимости в вызове __base
var BlocksLevel = require('./blocks');
module.exports = function (BEM) {
return BlocksLevel.extend()
.setNamingScheme('simple')
.addTechs('something.js')
.setDefaultTechs('something.js','something.js')
.createClass();
};
19
59. .bem/level.js
Есть в каждой папке уровня переопределения
Как правило, содержит только ссылку на прототип
Как правило, прототип и так очевиден из имени папки
21
60. .bem/level.js
Есть в каждой папке уровня переопределения
Как правило, содержит только ссылку на прототип
Как правило, прототип и так очевиден из имени папки
Конфигурация размазана по множеству файлов
21
61. LevelManager
module.exports = function () {
var levelManager = BEM.LevelManager.get();
levelManager.setLevelClass('*.blocks', BlocksLevel);
levelManager.setLevelClass('*.bundles', BundlesLevel);
};
22
62. LevelManager
Настраивается в make.js;
module.exports = function () {
var levelManager = BEM.LevelManager.get();
levelManager.setLevelClass('*.blocks', BlocksLevel);
levelManager.setLevelClass('*.bundles', BundlesLevel);
};
22
63. LevelManager
Настраивается в make.js;
Позволяет настроить несколько уровней сразу;
module.exports = function () {
var levelManager = BEM.LevelManager.get();
levelManager.setLevelClass('*.blocks', BlocksLevel);
levelManager.setLevelClass('*.bundles', BundlesLevel);
};
22
64. LevelManager+LevelBuilder
Наглядная настройка всех уровней проекта
module.exports = function (make) {
make.levels(function (levels) {
levels
.addLevel('*.blocks')
.addTechs(...)
.addLevel('*.bundles', {extends: '*.blocks'})
});
};
23