bem/bem-tools
-
f3fe763a6a17c85554911fa1054411cdc8aca240
f3fe763a6a17c85554911fa1054411cdc8aca240
TODO: По умолчанию библиотеки блоков не подключаются. Чтобы подключить нужные библиотеки блоков, добавьте
в `.bem/make.js` следующий код: -
a2176cd1a342cacd358bc84606e974cb3fe011a8
a2176cd1a342cacd358bc84606e974cb3fe011a8
```js
MAKE.decl('Arch', {
getLibraries: function() { -
7b82764db691202b20682961b1689f8d0b8095d1
7b82764db691202b20682961b1689f8d0b8095d1
return {
'bem-bl': {
type: 'git',
url: 'git://github.com/bem/bem-bl.git'
}
};
}
});
``` -
927cde2940859ac7658c2a64fe40b02b0467fab9
927cde2940859ac7658c2a64fe40b02b0467fab9
Здесь:
* `MAKE.decl()` - метод-хелпер, который позволяет переопределять стандартные классы bem tools, тем самым меняя функциональность.
* `'Arch'` - имя класса, который мы хотим переопределить. `Arch` отвечает за построение начального дерева сборки.
* `getLibraries` - метод класса Arch, который возвращает ассоциативный массив подключаемых библиотек.
* `'bem-bl'` — название библиотеки и директории, в которой она будет лежать. Допустимы имена вида 'mylibraries/bem-bl' -
тогда чекаут библиотеки произойдет в директорию `[корень проекта]/mylibraries/bem-bl`.
* `type` - указывает способ подключения. В примере используется значение `git`, означающее, что библиотеку нужно взять
из git репозитория. Возможные значение: `'git'`, `'svn'`, `'symlink'`. `svn` работает аналогично `git`, но с `svn` репозиторием.
`symlink` - создает символическую ссылку в собираемом проекте на директорию с контентом библиотеки на файловой системе.
Путь к библиотеке указывается через свойство `relative`.
* `url` - URL к svn/git репозиторию -
3e1a60203e177d4ef93401962f3226d0c5360d8f
3e1a60203e177d4ef93401962f3226d0c5360d8f
Или можно воспользоваться шоткатом: -
dcab8a8d88a23463142ea0d443dd778ebd498635
dcab8a8d88a23463142ea0d443dd778ebd498635
```js
MAKE.decl('Arch', {
libraries: {
'bem-bl': {
type: 'git',
url: 'git://github.com/bem/bem-bl.git'
}
}
});
``` -
49b3ce9be8bb7b3e32659797fc9a0b72a829307f
49b3ce9be8bb7b3e32659797fc9a0b72a829307f
###### Уровни переопределения -
d63f35a467aeec88ac5d0a7ef19e017687dc99f5
d63f35a467aeec88ac5d0a7ef19e017687dc99f5
По умолчанию уровнями переопределения считаются все директории `blocks*` в корне проекта. Чтобы это изменить,
добавьте в `.bem/make.js` следующий код: -
13fa39d7f3bcbad5f12da043ae35df65a998527a
13fa39d7f3bcbad5f12da043ae35df65a998527a
```js
MAKE.decl('Arch', {
blocksLevelsRegexp: /регулярное выражение/,
});
``` -
c3cbf62e0fd199a79968509df2a3a1dec15fcb7b
c3cbf62e0fd199a79968509df2a3a1dec15fcb7b
Регулярное выражение используется для фильтрации директорий в корне проекта. Директории, которые попадают под выражение,
будут считаться уровнями переопределения и для них будут созданы соответствующие узлы. -
212829577d8d2caa251bdbe7d2cfab2789562427
212829577d8d2caa251bdbe7d2cfab2789562427
Если изменения маски для выбора уровней не достаточно и нужна более сложная логика, нужно переопределить метод
`createBlocksLevelsNodes()`: -
7b904101f52fe96e0ac5add0762b6919b2f8253f
7b904101f52fe96e0ac5add0762b6919b2f8253f
```js
MAKE.decl('Arch', {
createBlocksLevelsNodes: function(parent, children) {
// Создаем экземпляр LevelNode
var node1 = new LevelNode(...);
// Добавляем созданный узел в дерево
this.arch.setNode(node1, parent, children); -
a6cf840ddb7983ad84347555035ef0ae638284f5
a6cf840ddb7983ad84347555035ef0ae638284f5
var node2 = new LevelNode(...);
this.arch.setNode(node2, parent, children); -
35b24c857ef5e304dc1f4225f51bd7b9ee22cd7d
35b24c857ef5e304dc1f4225f51bd7b9ee22cd7d
// Возвращаем массив из идентификаторов созданных узлов
return [node1.getId(), node2.getId()];
}
});
``` -
31ebc5e5a725b4af2ae2e296f4ac2b3aa63b594a
31ebc5e5a725b4af2ae2e296f4ac2b3aa63b594a
###### Бандлы и страницы -
6627e24654e1117cf99f11fe824430b5ee56b6f1
6627e24654e1117cf99f11fe824430b5ee56b6f1
По умолчанию уровнями бандлов считаются все директории `pages*` и `bundles*` в корне проекта. Изменить это можно по
аналогии с конфигурацией уровней переопределения. -
4a1e10b36fce78e548546e6a2fae9d1f8ab0691f
4a1e10b36fce78e548546e6a2fae9d1f8ab0691f
```js
MAKE.decl('Arch', {
bundlesLevelsRegexp: /регулярное выражение/,
});
``` -
93e6ca4296070055fc332ab44c167b5cb65ba9ab
93e6ca4296070055fc332ab44c167b5cb65ba9ab
И для большего контроля: -
5b4aa2b36d1482ba2180e34667b2ac7a8acb9d5b
5b4aa2b36d1482ba2180e34667b2ac7a8acb9d5b
```js
MAKE.decl('Arch', { -
674a9d64ea0e3460bb8792bfe011ff8aa7e1dfa3
674a9d64ea0e3460bb8792bfe011ff8aa7e1dfa3
getBundlesLevels: function() {
return [
'pages-desktop',
'pages-touch',
'bundles/common'
];
}