bem/bem-tools
-
Merged бандл может быть полезен, например, если вы хотите использовать общие файлы статики (js, css) для нескольких страниц проекта. Или при использовании технологии priv.js держать шаблоны страниц в одном файле.
Merged бандл может быть полезен, например, если вы хотите использовать общие файлы статики (js, css) для нескольких
страниц проекта. Или при использовании технологии priv.js держать шаблоны страниц в одном файле. -
Следующий код включит сборку merged бандла для всех уровней:
Следующий код включит сборку merged бандла для всех уровней:
-
```js MAKE.decl('BundlesLevelNode', { buildMergedBundle: function() { return true; } }); ```
```js
MAKE.decl('BundlesLevelNode', {
buildMergedBundle: function() {
return true;
}
});
``` -
Если merged бандл нужен только в выборочных уровнях, необходимо добавить условие (будем собирать merged только для уровня `pages-desktop`):
Если merged бандл нужен только в выборочных уровнях, необходимо добавить условие (будем собирать merged только для уровня
`pages-desktop`): -
```js var PATH = require('path');
```js
var PATH = require('path'); -
MAKE.decl('BundlesLevelNode', { buildMergedBundle: function() { if (this.getLevelPath() === 'pages-desktop') return true;
MAKE.decl('BundlesLevelNode', {
buildMergedBundle: function() {
if (this.getLevelPath() === 'pages-desktop') return true; -
return false; } }); ```
return false;
}
});
``` -
Метод `getLevelPath()` (есть у узлов-уровней и узлов-бандлов) возвращает относительный путь данного уровня или путь уровня данного бандла. С его помощью мы можем определить, нужно производить какие-либо действия для уровня или нет.
Метод `getLevelPath()` (есть у узлов-уровней и узлов-бандлов) возвращает относительный путь данного уровня или путь
уровня данного бандла. С его помощью мы можем определить, нужно производить какие-либо действия для уровня или нет. -
Изменить название merged банлда можно следующим образом: ```js MAKE.decl('BundlesLevelNode', {
Изменить название merged банлда можно следующим образом:
```js
MAKE.decl('BundlesLevelNode', { -
mergedBundleName: function() { return 'mymergedbundle'; }
mergedBundleName: function() {
return 'mymergedbundle';
} -
##### 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`, оптимизация не производится.
##### 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`, оптимизация не производится. -
Режимом по умолчанию является development. Установка `YENV` в значение production переключит его соответственно.
Режимом по умолчанию является development. Установка `YENV` в значение production переключит его соответственно.
-
Значения переменных окружения можно выставлять в `.bem/make.js`, например
Значения переменных окружения можно выставлять в `.bem/make.js`, например
-
```js process.env.YENV = 'production'; ```
```js
process.env.YENV = 'production';
``` -
### Файлы конфигурации
### Файлы конфигурации
-
#### Уровень переопределения (`.bem/level.js`)
#### Уровень переопределения (`.bem/level.js`)
-
На уровне переопределения должен быть файл конфигурации `.bem/level.js`, который содержит в себе мета-информацию об устройстве уровня, а именно:
На уровне переопределения должен быть файл конфигурации `.bem/level.js`, который содержит в себе мета-информацию
об устройстве уровня, а именно: -
- правила маппинга БЭМ-сущностей в файловую систему - технологии, определённые для уровня - мета-информация для системы сборки
- правила маппинга БЭМ-сущностей в файловую систему
- технологии, определённые для уровня
- мета-информация для системы сборки -
При создании уровня командой `bem create level` файл `.bem/level.js` создаётся пустым, что означает, что уровень — «стандартный». Поведение стандартного уровня описано в классе `Level` в файле (lib/level.js)[https://github.com/bem/bem-tools/blob/master/lib/level.js].
При создании уровня командой `bem create level` файл `.bem/level.js` создаётся пустым, что означает, что уровень —
«стандартный». Поведение стандартного уровня описано в классе `Level` в файле
(lib/level.js)[https://github.com/bem/bem-tools/blob/master/lib/level.js]. -
Перекрыть поведение уроня просто. Файл `.bem/level.js` (как и практически любой файл конфигурации) является CommonJS модулем. `bem-tools` при обнаружении такого файла создаёт класс-наследник стандартного класса `Level`, используя экспорт этого модуля в качестве расширения класса (внутри используется модуль [inherit](https://github.com/dfilatov/node-inherit)).
Перекрыть поведение уроня просто. Файл `.bem/level.js` (как и практически любой файл конфигурации) является CommonJS
модулем. `bem-tools` при обнаружении такого файла создаёт класс-наследник стандартного класса `Level`, используя экспорт
этого модуля в качестве расширения класса (внутри используется модуль [inherit](https://github.com/dfilatov/node-inherit)).