bem/bem-tools
-
6025d967a4bd750cc20ab4c86eba3ceaf4123305
6025d967a4bd750cc20ab4c86eba3ceaf4123305
Merged бандл может быть полезен, например, если вы хотите использовать общие файлы статики (js, css) для нескольких
страниц проекта. Или при использовании технологии priv.js держать шаблоны страниц в одном файле. -
17d672f6d716e3664d0fb9836b232feea3c6b368
17d672f6d716e3664d0fb9836b232feea3c6b368
Следующий код включит сборку merged бандла для всех уровней: -
5a1d192d2d23bedaf31df9af1b3421099dc1314e
5a1d192d2d23bedaf31df9af1b3421099dc1314e
```js
MAKE.decl('BundlesLevelNode', {
buildMergedBundle: function() {
return true;
}
});
``` -
c9f98f4cc42c94c5af5b6fcb7b2517e402d3993d
c9f98f4cc42c94c5af5b6fcb7b2517e402d3993d
Если merged бандл нужен только в выборочных уровнях, необходимо добавить условие (будем собирать merged только для уровня
`pages-desktop`): -
949901cc15c5b323c8a95d745d1814326380313f
949901cc15c5b323c8a95d745d1814326380313f
```js
var PATH = require('path'); -
9beb83d1a3ff4497bb635b051d1a9beb0496cb9e
9beb83d1a3ff4497bb635b051d1a9beb0496cb9e
MAKE.decl('BundlesLevelNode', {
buildMergedBundle: function() {
if (this.getLevelPath() === 'pages-desktop') return true; -
c9d2fdd820f26c8a345881c4ce5905b1a34d1704
c9d2fdd820f26c8a345881c4ce5905b1a34d1704
return false;
}
});
``` -
6dd8423b7a7fd30ded2f068cef8a3612698c25d7
6dd8423b7a7fd30ded2f068cef8a3612698c25d7
Метод `getLevelPath()` (есть у узлов-уровней и узлов-бандлов) возвращает относительный путь данного уровня или путь
уровня данного бандла. С его помощью мы можем определить, нужно производить какие-либо действия для уровня или нет. -
c750100f4418259545cb505cc29f70b2f48694ea
c750100f4418259545cb505cc29f70b2f48694ea
Изменить название merged банлда можно следующим образом:
```js
MAKE.decl('BundlesLevelNode', { -
728abd8bddffeca5039036e7bbead0fe904ed1e6
728abd8bddffeca5039036e7bbead0fe904ed1e6
mergedBundleName: function() {
return 'mymergedbundle';
} -
9d8768ce730aef6b93863bbf048ee4436a23f345
9d8768ce730aef6b93863bbf048ee4436a23f345
##### Production и Development сборка статики
Переключая значение переменной окружения `YENV`, можно собирать production или development версии статических файлов.
В production режиме файлы прогоняются через утилиту borschik, которая создаст файл с префиксом `_`, в который будет
включено содержимое всех подключаемых файлов. Например, если собирается `index.css`, в котором подключаются `blocks/block1.css`
и `blocks/block2.css`, то `borschik` создаст `_index.css` с контентом `block1.css` и `block2.css`. Кроме этого, `css`
файлы оптимизируются утилитой `csso`, `js` файлы минимизируются через `uglifyjs`. В development режиме файлы прогоняются
только через `borschik`, оптимизация не производится. -
c221a92395bd6c648967ded1425ffa1291222337
c221a92395bd6c648967ded1425ffa1291222337
Режимом по умолчанию является development. Установка `YENV` в значение production переключит его соответственно. -
4f26faa8fda83fb9abf0ea8e311c3c3a4c9d15dd
4f26faa8fda83fb9abf0ea8e311c3c3a4c9d15dd
Значения переменных окружения можно выставлять в `.bem/make.js`, например -
d1408a24a67fb393a3269198763f926de3310158
d1408a24a67fb393a3269198763f926de3310158
```js
process.env.YENV = 'production';
``` -
86fa69924857ee95796732137086bd4d99b37a35
86fa69924857ee95796732137086bd4d99b37a35
### Файлы конфигурации -
f5ea98656a5b53c961b0e4c38eee9eecf6cf34f5
f5ea98656a5b53c961b0e4c38eee9eecf6cf34f5
#### Уровень переопределения (`.bem/level.js`) -
194a541ad338ab372bfd03ed9433a426fbd61480
194a541ad338ab372bfd03ed9433a426fbd61480
На уровне переопределения должен быть файл конфигурации `.bem/level.js`, который содержит в себе мета-информацию
об устройстве уровня, а именно: -
589d823bdf8a900da296c0d355902129ff3f6bf3
589d823bdf8a900da296c0d355902129ff3f6bf3
- правила маппинга БЭМ-сущностей в файловую систему
- технологии, определённые для уровня
- мета-информация для системы сборки -
c72defcab3c960524574ddbcbfe400339d235022
c72defcab3c960524574ddbcbfe400339d235022
При создании уровня командой `bem create level` файл `.bem/level.js` создаётся пустым, что означает, что уровень —
«стандартный». Поведение стандартного уровня описано в классе `Level` в файле
(lib/level.js)[https://github.com/bem/bem-tools/blob/master/lib/level.js]. -
ddba0defb44beb19e73c91acd87800bc43ea8dde
ddba0defb44beb19e73c91acd87800bc43ea8dde
Перекрыть поведение уроня просто. Файл `.bem/level.js` (как и практически любой файл конфигурации) является CommonJS
модулем. `bem-tools` при обнаружении такого файла создаёт класс-наследник стандартного класса `Level`, используя экспорт
этого модуля в качестве расширения класса (внутри используется модуль [inherit](https://github.com/dfilatov/node-inherit)).