bem/bem-tools
- 
Или можно воспользоваться шоткатом:Или можно воспользоваться шоткатом: 
- 
```js MAKE.decl('Arch', { libraries: { 'bem-bl': { type: 'git', url: 'git://github.com/bem/bem-bl.git' } } }); ``````js 
 MAKE.decl('Arch', {
 libraries: {
 'bem-bl': {
 type: 'git',
 url: 'git://github.com/bem/bem-bl.git'
 }
 }
 });
 ```
- 
###### Уровни переопределения###### Уровни переопределения 
- 
По умолчанию уровнями переопределения считаются все директории `blocks*` в корне проекта. Чтобы это изменить, добавьте в `.bem/make.js` следующий код:По умолчанию уровнями переопределения считаются все директории `blocks*` в корне проекта. Чтобы это изменить, 
 добавьте в `.bem/make.js` следующий код:
- 
```js MAKE.decl('Arch', { blocksLevelsRegexp: /регулярное выражение/, }); ``````js 
 MAKE.decl('Arch', {
 blocksLevelsRegexp: /регулярное выражение/,
 });
 ```
- 
Регулярное выражение используется для фильтрации директорий в корне проекта. Директории, которые попадают под выражение, будут считаться уровнями переопределения и для них будут созданы соответствующие узлы.Регулярное выражение используется для фильтрации директорий в корне проекта. Директории, которые попадают под выражение, 
 будут считаться уровнями переопределения и для них будут созданы соответствующие узлы.
- 
Если изменения маски для выбора уровней не достаточно и нужна более сложная логика, нужно переопределить метод `createBlocksLevelsNodes()`:Если изменения маски для выбора уровней не достаточно и нужна более сложная логика, нужно переопределить метод 
 `createBlocksLevelsNodes()`:
- 
```js MAKE.decl('Arch', { createBlocksLevelsNodes: function(parent, children) { // Создаем экземпляр LevelNode var node1 = new LevelNode(...); // Добавляем созданный узел в дерево this.arch.setNode(node1, parent, children);```js 
 MAKE.decl('Arch', {
 createBlocksLevelsNodes: function(parent, children) {
 // Создаем экземпляр LevelNode
 var node1 = new LevelNode(...);
 // Добавляем созданный узел в дерево
 this.arch.setNode(node1, parent, children);
- 
var node2 = new LevelNode(...); this.arch.setNode(node2, parent, children);var node2 = new LevelNode(...); 
 this.arch.setNode(node2, parent, children);
- 
// Возвращаем массив из идентификаторов созданных узлов return [node1.getId(), node2.getId()]; } }); ```// Возвращаем массив из идентификаторов созданных узлов 
 return [node1.getId(), node2.getId()];
 }
 });
 ```
- 
###### Бандлы и страницы###### Бандлы и страницы 
- 
По умолчанию уровнями бандлов считаются все директории `pages*` и `bundles*` в корне проекта. Изменить это можно по аналогии с конфигурацией уровней переопределения.По умолчанию уровнями бандлов считаются все директории `pages*` и `bundles*` в корне проекта. Изменить это можно по 
 аналогии с конфигурацией уровней переопределения.
- 
```js MAKE.decl('Arch', { bundlesLevelsRegexp: /регулярное выражение/, }); ``````js 
 MAKE.decl('Arch', {
 bundlesLevelsRegexp: /регулярное выражение/,
 });
 ```
- 
И для большего контроля:И для большего контроля: 
- 
```js MAKE.decl('Arch', {```js 
 MAKE.decl('Arch', {
- 
getBundlesLevels: function() { return [ 'pages-desktop', 'pages-touch', 'bundles/common' ]; }getBundlesLevels: function() { 
 return [
 'pages-desktop',
 'pages-touch',
 'bundles/common'
 ];
 }
- 
Для каждого бандла по умолчанию собираются следующие конечные файлы:
 Для каждого бандла по умолчанию собираются следующие конечные файлы:
- 
* `.bemhtml.js` * `.html` * `.css` * `.ie.css` * `.js` * `_*.css` * `_*.ie.css` * `_*.js`* `.bemhtml.js` 
 * `.html`
 * `.css`
 * `.ie.css`
 * `.js`
 * `_*.css`
 * `_*.ie.css`
 * `_*.js`
- 
и промежуточные:и промежуточные: 
- 
* `.bemdecl.js` * `.deps.js` * `.deps.js.deps.js` * `.bemhtml.js.meta.js` * `.js.meta.js` * `.css.meta.js` * `.ie.css.meta.js`* `.bemdecl.js` 
 * `.deps.js`
 * `.deps.js.deps.js`
 * `.bemhtml.js.meta.js`
 * `.js.meta.js`
 * `.css.meta.js`
 * `.ie.css.meta.js`