bem-tools — это набор инструментов для работы с файлами по БЭМ-методологии. Он позволяет создавать сущности, собирать финальный рантайм, работать с build-декларациями, собирать весь проект командой bem make или запускать сервер разработки на дереве исходников проекта (используя bem server). Один из самых популярных способов расширения возможностей bem-tools — написание модулей технологий. В докладе речь пойдет о том, зачем их писать и как убедиться в том, что все сделано правильно.
23. Назначение модулей технологий
• создание файлов по шаблону (bem create)
bem create —l common.block --block my-block —T css
!10
24. Назначение модулей технологий
• создание файлов по шаблону (bem create)
bem create —l common.block --block my-block —T css
• сборка результатов (bem build)
!10
25. Назначение модулей технологий
• создание файлов по шаблону (bem create)
bem create —l common.block --block my-block —T css
• сборка результатов (bem build)
• исходные файлы — внутри блоков
!10
26. Назначение модулей технологий
• создание файлов по шаблону (bem create)
bem create —l common.block --block my-block —T css
• сборка результатов (bem build)
• исходные файлы — внутри блоков
• блоки — внутри уровней переопределения
!10
27. Назначение модулей технологий
• создание файлов по шаблону (bem create)
bem create —l common.block --block my-block —T css
• сборка результатов (bem build)
• исходные файлы — внутри блоков
• блоки — внутри уровней переопределения
• результат — в бандл
!10
39. Заготовка
• используется вторая версия API
• techMixin будет «примешан» к классу TechV2
!
exports.API_VER = 2;!
exports.techMixin = {!
//здесь будет код!
};
!17
45. getBuildResults, по умолчанию
• сканирует все уровни переопределения
• собирает исходные файлы для сущностей из декларации
!21
46. getBuildResults, по умолчанию
• сканирует все уровни переопределения
• собирает исходные файлы для сущностей из декларации
• проверяет, нужна ли пересборка
!21
47. getBuildResults, по умолчанию
•
•
•
•
!21
сканирует все уровни переопределения
собирает исходные файлы для сущностей из декларации
проверяет, нужна ли пересборка
вызывает getBuildResult для каждого выходного файла
57. Полный процесс
• вызывается getBuildResults(decl, levels, output, opts)
• сканируются уровни
• находятся все исходные файлы БЭМ-сущностей из
декларации
!28
58. Полный процесс
• вызывается getBuildResults(decl, levels, output, opts)
• сканируются уровни
• находятся все исходные файлы БЭМ-сущностей из
декларации
• для каждого выходного файла зовется getBuildResult(files,
suffix, output, opts)
!28
59. Полный процесс
• вызывается getBuildResults(decl, levels, output, opts)
• сканируются уровни
• находятся все исходные файлы БЭМ-сущностей из
декларации
• для каждого выходного файла зовется getBuildResult(files,
suffix, output, opts)
• для кажого исходного файла зовется
getBuildResultChunk(relPath, path, suffix)
!28
60. Полный процесс
• вызывается getBuildResults(decl, levels, output, opts)
• сканируются уровни
• находятся все исходные файлы БЭМ-сущностей из
декларации
• для каждого выходного файла зовется getBuildResult(files,
suffix, output, opts)
• для кажого исходного файла зовется
getBuildResultChunk(relPath, path, suffix)
• результаты склеиваются и записываются на диск
!28
63. На уровне блоков
В .bem/levels/blocks.js добавить полный путь к модулю в getTechs:
exports.getTechs = function() {!
return {!
…!
"coffee+js": "/path/to/tech/module.js"!
};!
};
!31
64. В make.js
Добавить в BundleNode#getTechs
registry.decl('BundleNode', {!
getTechs: function() {!
return [!
...!
'coffee+js',!
...!
];!
}!
});
!32
65. Минификация (в 0.6.x и 0.7.x)
Указать в make.js как технология должна оптимизироваться
registry.decl('BundleNode', {!
!
...!
!
'create-coffee+js-optimizer-node': function() {!
this['create-js-optimizer-node'].apply(this,
arguments);!
}!
});
!33
68. Минификация (в 1.0.0)
• убедиться, что технология min.js включена в сборку
– зарегистрирована на уровне бандлов
!34
69. Минификация (в 1.0.0)
• убедиться, что технология min.js включена в сборку
– зарегистрирована на уровне бандлов
– добавлена в BundleNode::getTechs
!34