bem/bem-tools
-
9bd8a3cd349786d8935f37e1356bb5a5582dd197
9bd8a3cd349786d8935f37e1356bb5a5582dd197
Так же вы можете организовать контекстное наследование, использую переменную `baseTechName`.
В этом случае базовый класс будет выбран в зависимости от уровня переопределения, на котором
будет использован модуль технологии. -
0ecd816e72362759b0575163f21fafdfd7b84cbf
0ecd816e72362759b0575163f21fafdfd7b84cbf
```js
exports.baseTechName = 'css';
``` -
34b54a396e3f96b343f56847d5ad13158484d73c
34b54a396e3f96b343f56847d5ad13158484d73c
В этом примере новая технология будет расширять технологию `css`, заданную на уровне переопределения
в файле `.bem/level.js`. -
3aa428bd0192cc8ca2b0c898054208afbcb76059
3aa428bd0192cc8ca2b0c898054208afbcb76059
##### Для продвинутых -
ae4c8e87bdf554be1cc5895f893c4ed6fbbc3647
ae4c8e87bdf554be1cc5895f893c4ed6fbbc3647
Если вам нужен полный контроль, вы можете создать модуль, экспортирующий готовый класс технологии `Tech`. -
d71301eca884b89862bfa2cf643adde981adfe46
d71301eca884b89862bfa2cf643adde981adfe46
```js
var INHERIT = require('inherit'),
BaseTech = require('bem/lib/tech').Tech; -
3dc42c7fca2e9ede61d733f7e8044d3ab58358cb
3dc42c7fca2e9ede61d733f7e8044d3ab58358cb
exports.Tech = INHERIT(BaseTech, { -
da404259dc6a895071be77ad73206dcb4f9059fe
da404259dc6a895071be77ad73206dcb4f9059fe
create: function(prefix, vars, force) {
// do some creation work
}, -
3b25e3faa65e2ecc42ca6af002cd1449022a963f
3b25e3faa65e2ecc42ca6af002cd1449022a963f
build: function(prefixes, outputDir, outputName) {
// organize own build process
} -
ae3b86b2540bf0b4f8392eb6cac92499e787eeb5
ae3b86b2540bf0b4f8392eb6cac92499e787eeb5
Если в качестве базовой технологии вы хотите использовать одну из существующих технологий,
написанных в простом стиле, воспользуйтесь функцией `getTechClass()` для получения класса
этой технологии. Мы рекомендуем всегда использовать `getTechClass()`, чтобы не зависеть
от реализации базовой технологии. -
065a059db8a32ec078c1ba2919306f5a364c2dc9
065a059db8a32ec078c1ba2919306f5a364c2dc9
```js
var INHERIT = require('inherit'),
BEM = require('bem'),
BaseTech = BEM.getTechClass(require.resolve('path/to/tech/module')); -
9cb9c9f59e96e381dc61ac6e594b1903a412cb55
9cb9c9f59e96e381dc61ac6e594b1903a412cb55
// ваш код -
c49e428eaad981c32f9dc0ddee99f7f6dc272713
c49e428eaad981c32f9dc0ddee99f7f6dc272713
##### Примеры модулей технологий -
3a743cb8be0030f394f48f1a3785f6502df7a287
3a743cb8be0030f394f48f1a3785f6502df7a287
* [bem-tools/lib/techs/](https://github.com/bem/bem-tools/tree/nodejs/lib/techs)
* [bem-bl/blocks-common/i-bem/bem/techs/](https://github.com/bem/bem-bl/tree/master/blocks-common/i-bem/bem/techs) -
bead77508a378ba0b2474daf9876d8994f135f57
bead77508a378ba0b2474daf9876d8994f135f57
### Использование через API -
7c76dea77d09253b6ba64eff9efed02c3c08b667
7c76dea77d09253b6ba64eff9efed02c3c08b667
В версии 0.2.0 появилась возможность использовать команды `bem-tools` через API. -
34b3d3ce009f36190f2324dbe9bd058e90682c52
34b3d3ce009f36190f2324dbe9bd058e90682c52
Модуль `bem` экспортирует объект основной команды, у которого есть свойство `api`.
Использовать его можно так: -
980f52689df973c5a20977185c70567decc3827b
980f52689df973c5a20977185c70567decc3827b
```js
var Q = require('q'),
BEM = require('bem').api, -
43f645b91a338d49372d8e698fef112e42222c59
43f645b91a338d49372d8e698fef112e42222c59
techs = ['css', 'js'],
blocks = ['b-block1', 'b-block2']; -
290fba1fb6fbae65af8334078ab7ab3948b9cc0b
290fba1fb6fbae65af8334078ab7ab3948b9cc0b
Q.when(BEM.create.block({ forceTech: techs }, { names: blocks }), function() {
console.log('Create blocks: %s', blocks.join(', '));
});
```