bem/bem-tools
-
```js MAKE.decl('Arch', { getLibraries: function() {
```js
MAKE.decl('Arch', {
getLibraries: function() { -
return { 'bem-bl': { type: 'git', url: 'git://github.com/bem/bem-bl.git' } }; } }); ```
return {
'bem-bl': {
type: 'git',
url: 'git://github.com/bem/bem-bl.git'
}
};
}
});
``` -
Здесь: * `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 репозиторию
Здесь:
* `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 репозиторию -
Или можно воспользоваться шоткатом:
Или можно воспользоваться шоткатом:
-
```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'
];
} -
Для каждого бандла по умолчанию собираются следующие конечные файлы:
Для каждого бандла по умолчанию собираются следующие конечные файлы: