bem/bem-tools
-
cbe1aeae26fec4c4e669b476ff1b8cc6323c27f2
cbe1aeae26fec4c4e669b476ff1b8cc6323c27f2
* подключает библиотеки блоков
* выполняет сборку в уровнях переопределения
* выполняет сборку бандлов
* собирает шаблоны (`bemhtml`)
* собирает `html` из `bemjson.js`
* собирает статические файлы (`js`, `css`)
* раскрывает `@import` в `css` файлах (`borschik`)
* раскрывает `borschik:link:include` в `js` файлах (`borschik`)
* сжимает `css` файлы при помощи `csso`
* сжимает `js` файлы при помощи `uglifyjs` -
2efc3934856d11f8c029d28b29e0b32b9c260214
2efc3934856d11f8c029d28b29e0b32b9c260214
##### bem server -
23cd7e58acdf4fe40e01b2e62469b5efec770fa2
23cd7e58acdf4fe40e01b2e62469b5efec770fa2
`bem server` веб-сервер разработчика, который делает доступными по http протоколу файлы, собранные на лету bem make. bem server может быть вам полезен для разработки статических страниц по bem методу. Вы просто вносите изменения в файлы проекта, обновляете страницу в браузере и видите новый результат — файлы, которые затронули ваши изменения, будут автоматически пересобраны. Если же в вашем проекте нет статических страниц, вы можете настроить бэкенд и окружение таким образом, чтобы он обращался к bem server за файлами стилей и скриптов. bem server позволяет общаться с ним через привычный TCP socket или через UNIX domain socket. -
94b14073ebc4694bb788e1f01c8404aba7000cd0
94b14073ebc4694bb788e1f01c8404aba7000cd0
По умолчанию корневым каталогом веб-сервера считается текущая директория. Вы можете указать нужный каталог с помощью
ключа --project (-r). Таким образом, если в корне есть файл pages/about/main.css, то он будет доступен из браузера
по адресу http://localhost:8080/pages/about/main.css. -
305f394264a4f16a47e223213ac14001d0845688
305f394264a4f16a47e223213ac14001d0845688
TCP порт по умолчанию, который слушает сервер - 8080. Вы можете указать другой порт, используя ключ --port (-p). -
31f528f7a11e6df1bd47ce7b16c8240afe83b05c
31f528f7a11e6df1bd47ce7b16c8240afe83b05c
Когда запрашиваемый URL соответствует директории, сервер проверит, возможно ли собрать для запрошенной директории файл
`index.html`. Если это так, то страница будет собрана и отдана браузеру. Иначе браузер получит листинг файлов в директории. -
5ff02907a17ec15e4cbca26de725a81c8fa7104c
5ff02907a17ec15e4cbca26de725a81c8fa7104c
#### Конфигурирование сборки -
36f840360671f8cdf113e23f26a5665e449b8380
36f840360671f8cdf113e23f26a5665e449b8380
В системе сборки предусмотрено некоторое поведение по умолчанию. С помощью файлов конфигурации можно как немного изменить
его, так и кардинально переделать. Необходимым минимумом для работы bem make являются конфиги `.bem/level.js` на уровнях
переопределения с функцией `getTechs()`, возвращающей массив технологий, задействованных на уровне. И функцией `getConfig()`: -
f0a23d6bb118725f123267d5b54d481577330149
f0a23d6bb118725f123267d5b54d481577330149
```js
var extend = require('bem/lib/util').extend; -
caa77c0e122bee553af4296601ec9708ca13f893
caa77c0e122bee553af4296601ec9708ca13f893
exports.getTechs = function() {
return {
'bemjson.js': '',
'js': 'js-i',
'bemhtml.js': '../../bem-bl/blocks-common/i-bem/bem/techs/bemhtml.js',
'priv.js': '../../.bem/techs/priv.js',
'html': '../../bem-bl/blocks-common/i-bem/bem/techs/html'
};
}; -
7b86e280e3b9e78e268d9fb86d480f4c4690bf16
7b86e280e3b9e78e268d9fb86d480f4c4690bf16
exports.getConfig = function() { -
8d0daaf7e4ed99ac4ff49391be4dade9c2f20340
8d0daaf7e4ed99ac4ff49391be4dade9c2f20340
return extend({}, this.__base() || {}, { -
10f78c4cf9da24fb36a1e809f91f2e2a456088a5
10f78c4cf9da24fb36a1e809f91f2e2a456088a5
bundleBuildLevels: this.resolvePaths([
'../../bem-bl/blocks-common',
'../../bem-bl/blocks-desktop',
'../../blocks'
]) -
716ce942c4e0ef8c56d3b039f18b9cdd8e6afae4
716ce942c4e0ef8c56d3b039f18b9cdd8e6afae4
}); -
6491cbead47faf1d0be6e680ed4cb3d14bf599fc
6491cbead47faf1d0be6e680ed4cb3d14bf599fc
};
``` -
cb49eddf884eddfdb2954772eb1aa76d8928ec21
cb49eddf884eddfdb2954772eb1aa76d8928ec21
`getTechs()` возвращает массив подключаемых технологий: ключ (например `'bemjson.js'`, `'js'`, `'bemhtml.js'`) указывает
имя, под котором технологию можно будет использовать, значение (`''`, `'js-i'`, `'../../bem-bl/blocks-common/i-bem/bem/techs/bemhtml.js'`) -
где взять сам файл технологии. В качестве этого значения может быть указан абсолютный или относительный путь к файлу,
пустая строка или просто имя файла. В последнем случае подразумевается, что технология стандартная (входит в состав
bem-tools) и ее поиск будет произведен в директории `[bem]/lib/techs`. -
de829c8d0f1f3f1240b5c0edfd5a1584483c3543
de829c8d0f1f3f1240b5c0edfd5a1584483c3543
Функция `getConfig()` возвращает объект со свойстовом `bundleBuildLevels`, содержащим массив подключаемых уровней блоков. -
5a50569f6475403acdf1fa01bd560e3ff12325d3
5a50569f6475403acdf1fa01bd560e3ff12325d3
Второй (опциональный) компонент конфигурации - это файл `.bem/make.js` в корне проекта. Основой сборки является граф
узлов, каждый из которых отвечает за выполнение своей части всего процесса. В `make.js` можно изменять поведение узлов
и построение дерева. Существует несколько типов стандартных узлов:
* `Node` - базовый узел, от которого наследуются все остальные
* `LibraryNode` - отвечает за подключение внешних библиотек
* `LevelNode` - анализирует содержимое уровня переопределения и достраивает дерево для сборки этого уровня
* `BundlesLevelNode` - доопределяет `LevelNode` для сборки уровней бандлов
* `BundleNode` - достраивает дерево для сборки бандла
* `MergedBundleNode` - отвечает за сборку merged бандла (называемого так же common)
* `BorschikNode` - прогоняет файлы через утилиту `borschik`, которая разворачивает инклюды
* `Arch` - строит исходное дерево, состоящее главным образом из узлов `LibraryNode`, `BundlesLevelNode`, `LevelNode` -
fc9a8dce3f207ea500438722a300af9263083022
fc9a8dce3f207ea500438722a300af9263083022
Чтобы сконфигурировать сборку своего проекта, необходимо переопределить поведение тех или иных узлов. Это делается в
конфигурационном файле `.bem/make.js` в корне проекта с помощью хелпера `MAKE.decl()`. Первым аргументом ему передается
название узла, который будет переопределен. Вторым - объект с переопределяющими методами. -
5c27929c0234de4532f6c79c6488eb69aea49f9c
5c27929c0234de4532f6c79c6488eb69aea49f9c
```js
MAKE.decl('BundleNode', {