bem/bem-tools
-
8768363732bc932f754093d72e03453bf8bd04d8
8768363732bc932f754093d72e03453bf8bd04d8
```
level/
block/
__elem/
_mod/
block__elem_mod_val.css
block__elem.css
_mod/
block_mod_val.css
block.css
``` -
728fa2df1f09190cab3188cd1b0adb67dfeeed83
728fa2df1f09190cab3188cd1b0adb67dfeeed83
Если вас не устраивает эта схема, вы можете задать свою. Для этого нужно перекрыть соответствующие `match*()` и `get*()`
методы в файле `.bem/level.js`. -
86df126e767a0605f4aa1b79f75e40950affbdf5
86df126e767a0605f4aa1b79f75e40950affbdf5
##### Технологии, определённые для уровня -
6a8baa30c502098b0f02dd5020c78c2d6207ad72
6a8baa30c502098b0f02dd5020c78c2d6207ad72
Для уровня переопределения можно задекларировать список используемых технологий. Для этого нужно экспортировать
функцию `getTechs()`, которая должна вернуть объект, в ключах которого лежат имена технологий, а в значениях: -
b17a17ceb7b9e0878e74f60f187fe2fb9093fd60
b17a17ceb7b9e0878e74f60f187fe2fb9093fd60
- абсолютный путь до технологии — будет использоваться модуль, находящийся по этому пути;
- короткое имя технологии — будет использоваться реализация технологии с указанным именем из `bem-tools`;
- пустая строка — будет использоваться реализация технологии по умолчанию. -
0a48b4d00482565556f0c6908cf436785cea3b8a
0a48b4d00482565556f0c6908cf436785cea3b8a
По умолчанию на уровне переопределения явно не определена ни одна из технологий. Если попытаться внутри таких уровней
использовать техологии по короткому имени, например `css`, `js` и другие, то будут использованы модули технологии
из состава `bem-tools`, если они существуют. Полный список таких технологий смотрите в [lib/techs](https://github.com/bem/bem-tools/tree/master/lib/techs). -
b2faaf9996f07927bd50e167f1b6ad69f4fb25d6
b2faaf9996f07927bd50e167f1b6ad69f4fb25d6
Если попытаться использовать технологии, которые явно не задекларированы, и которых при этом не существуют
в `bem-tools` — будет использоваться реализация технологии по умолчанию
(см. [lib/tech.js](https://github.com/bem/bem-tools/blob/master/lib/tech.js)). -
0557c851674e054f229360efa959afdba465db0d
0557c851674e054f229360efa959afdba465db0d
Технологии, задекларированные на уровне используются: -
83a5780415b24f8e2b1f01ae6b18b9967d55892d
83a5780415b24f8e2b1f01ae6b18b9967d55892d
- командой `bem create`
- командой `bem build`
- для интроспекции по файловой системе (см. метод `getLevelByIntrospection()` класса `Level`)
- в процессе сборки командами `bem make` и `bem build` -
7c859bd7914daef82a62e212f9bbb7e648b82622
7c859bd7914daef82a62e212f9bbb7e648b82622
Мы рекомендуем явно декларировать все используемые технологии. -
8844381fd0fac2cd046069f5fe65b25c39854be3
8844381fd0fac2cd046069f5fe65b25c39854be3
##### Мета-информация для системы сборки -
8b42c96aa6b66a15af6255e1d7b36fa1230fefe5
8b42c96aa6b66a15af6255e1d7b36fa1230fefe5
Во время сборки проекта командами `bem make` и `bem server` для выполнения команды `bem build` нужно знание о том,
из каких уровней переопределения нужно собирать тот или иной бандл. Это знания необходимо отобразить в свойсте
`bundleBuildLevels` объекта, возвращаемого функцией `getConfig()`. -
27abd213259acee90afef1e6d4ed7cbd361c37c3
27abd213259acee90afef1e6d4ed7cbd361c37c3
```js
exports.getConfig = function() { -
890cc3e9701b6a3a25b926d4c219e5c31984f2fc
890cc3e9701b6a3a25b926d4c219e5c31984f2fc
bundleBuildLevels: this.resolvePaths([
// your levels here
]) -
526f4a4a84f80b5e5f25270d8309b0268856be33
526f4a4a84f80b5e5f25270d8309b0268856be33
### Модули технологий -
7f719486d5538cc2e6dfe0cc03eddc4dbd021fb5
7f719486d5538cc2e6dfe0cc03eddc4dbd021fb5
#### API -
356556ab13f2e34c8f269817bd975579610e47ef
356556ab13f2e34c8f269817bd975579610e47ef
Смотрите документацию в исходном файле [lib/tech.js](https://github.com/bem/bem-tools/blob/master/lib/tech.js). -
833d3f9871a705ac729d7a4cf22ef94ce60d2dac
833d3f9871a705ac729d7a4cf22ef94ce60d2dac
#### Создание модуля технологии -
5677eccecb12dfae7d44a4f45034d89dfe950f9d
5677eccecb12dfae7d44a4f45034d89dfe950f9d
Существует несколько способов написания модулей технологии. -
c9966f6119d7eb9b313305ca87905a7d31bf6f34
c9966f6119d7eb9b313305ca87905a7d31bf6f34
Во всех описанных ниже способах из методов можно обратиться к объекту технологии через `this`,
а через `this.__base(...)` можно вызвать метод одного из базовых классов. К классу технологии
можно обратиться через `this.__class`. Всё это является следствием использование модуля
[inherit](https://github.com/dfilatov/node-inherit) для органиазации наследования.