bem/bem-tools
- 
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) для органиазации наследования. - 
421e349ce7effe357b3cfe493e6688ff128862bc
421e349ce7effe357b3cfe493e6688ff128862bc
##### Очень простой способ - 
3acd63d49d5d8693804c3a7a49f51f13cf459654
3acd63d49d5d8693804c3a7a49f51f13cf459654
Способ заключается в том, что вы создаёте обычный CommonJS модуль, из
которого экспортируете несколько функций, которые перекроют методы базового
класса `Tech` из модуля [lib/tech.js](https://github.com/bem/bem-tools/blob/master/lib/tech.js). - 
63a096811b44516dbd165135439d4d636336e649
63a096811b44516dbd165135439d4d636336e649
```js
exports.getCreateResult = function(...) {
// ваш код
};
``` - 
2178b5c1846ee5d1d676328fa0aec7f7ee95d59b
2178b5c1846ee5d1d676328fa0aec7f7ee95d59b
Вы так же можете сгруппироать все методы в объекте `techMixin`. Это рекомендованный способ. - 
d16386309a94c244f6e9de2bbd37b1daed803fde
d16386309a94c244f6e9de2bbd37b1daed803fde
```js
exports.techMixin = { - 
60bbeeb710dac2a19cef2be4f5c1ca8a88c013f9
60bbeeb710dac2a19cef2be4f5c1ca8a88c013f9
getCreateResult: function(...) {
// ваш код
} - 
243c8b0a3eec97bc80a519d4a2a807d527ba5fbf
243c8b0a3eec97bc80a519d4a2a807d527ba5fbf
##### Простой способ - 
3437f9888282b7fc65c68b4e3b311d2705683fe6
3437f9888282b7fc65c68b4e3b311d2705683fe6
В простом способе к экспортируемым функциям добавляется переменная `baseTechPath`, в которой
содержится абсолютный путь до расширяемого модуля технологии.