Форум

Методология

Toolbox

Платформа

Сообщество

API технологий

Пакет предоставляет следующие технологии:

browser-js

Собирает исходные JS-файлы блоков, предназначенные для работы в браузере.

В сборку попадают как файлы, код которых будет работать в любой среде исполнения (с расширением .vanilla.js), так и файлы, код которых может работать только в браузере (с расширением .browser.js или .js).

Опции

Опции указываются в конфигурационном файле .enb/make.js.

target

Тип: String. По умолчанию: ?.browser.js.

Имя файла, куда будет записан результат сборки необходимых JS-файлов проекта — скомпилированный файл ?.browser.js

filesTarget

Тип: String. По умолчанию: ?.files.

Имя таргета, откуда будет доступен список исходных файлов для сборки. Список файлов предоставляет технология files пакета enb-bem-techs.

sourceSuffixes

Тип: String | String[]. По умолчанию: ['vanilla.js', 'js', 'browser.js'].

Суффиксы файлов, по которым отбираются файлы с JS-кодом.

iife

Тип: Boolean. По умолчанию: false.

Изолирует код блоков друг от друга, оборачивая код каждого файла в IIFE.

compress

Тип: Boolean. По умолчанию: false.

Минимизация итогового JS-кода с помощью UglifyJS.

sourcemap

Тип: Boolean. По умолчанию: false.

Построение карт кода (source maps) с информацией об исходных файлах.

Карты встраиваются в скомпилированный файл ?.files, а не хранятся в отдельном файле с расширением .map.

includeYM

Тип: Boolean. По умолчанию: false.

Добавляет код YModules в начало файла.


Пример

 // Код блоков в файловой системе до сборки
 // blocks/
 // ├── block.vanilla.js
 // └── block.browser.js
 // └── block.js
 //
 // После сбоки
 // bundle/
 // └── bundle.browser.js

var BrowserJsTech = require('enb-js/techs/browser-js'),
    FileProvideTech = require('enb/techs/file-provider'),
    bemTechs = require('enb-bem-techs');

module.exports = function(config) {
    config.node('bundle', function(node) {
        // Получение списка файлов для сборки
        node.addTechs([
            [FileProvideTech, { target: '?.bemdecl.js' }],
            [bemTechs.levels, { levels: ['blocks'] }],
            [bemTechs.deps],
            [bemTechs.files]
        ]);

        // Сборка JS-файл для работы в браузере
        node.addTech(BrowserJsTech);
        node.addTarget('?.browser.js');
    });
};

node-js

Собирает исходные JS-файлы блоков, предназначенные для работы в Node.js.

В сборку попадают как файлы, код которых будет работать в любой среде исполнения (с расширением .vanilla.js), так и файлы, код которых может работать только в Node.js (с расширением .node.js).

По умолчанию все исходные файлы подключаются с помощью require. Пути обрабатываются относительно того файла, в котором написан require.

Для корректной работы требуется наличие всех исходных файлов. Чтобы собрать код в один независимый файл (не требующий наличия исходных файлов), необходимо использовать опцию bundled.

Опции

Опции указываются в конфигурационном файле .enb/make.js.

target

Тип: String. По умолчанию: ?.node.js.

Имя файла, куда будет записан результат сборки необходимых JS-файлов проекта — скомпилированный файл ?.node.js.

filesTarget

Тип: String. По умолчанию: ?.files.

Имя таргета, откуда будет доступен список исходных файлов для сборки. Список файлов предоставляет технология files пакета enb-bem-techs.

sourceSuffixes

Тип: String | String[]. По умолчанию: ['vanilla.js', 'node.js'].

Суффиксы файлов, по которым отбираются файлы с JS-кодом.

devMode

Тип: Boolean. По умолчанию: true.

Режим сборки, предназначенный для разработки. При каждом выполнении кэш Node.js не будет учитываться. Это позволяет видеть изменения без перезапуска Node.js.

bundled

Тип: Boolean. По умолчанию: false.

Собирает все исходные файлы в один файл.

При использовании этой опции отпадает необходимость в хранении исходных JS-файлов для выполнения собранного файла.

includeYM

Тип: Boolean. По умолчанию: false.

Предоставляет YModules в глобальную переменную modules.


Пример

// Код блоков в файловой системе до сборки:
// blocks/
// ├── block.vanilla.js
// └── block.node.js
//
// После сбоки:
// bundle/
// └── bundle.node.js

var NodeJsTech = require('enb-js/techs/node-js'),
    FileProvideTech = require('enb/techs/file-provider'),
    bemTechs = require('enb-bem-techs');

module.exports = function(config) {
    config.node('bundle', function(node) {
        // Получение списка файлов для сборки
        node.addTechs([
            [FileProvideTech, { target: '?.bemdecl.js' }],
            [bemTechs.levels, { levels: ['blocks'] }],
            [bemTechs.deps],
            [bemTechs.files]
        ]);

        // Сборка JS-файл для работы в Node.js
        node.addTech(NodeJsTech);
        node.addTarget('?.node.js');
    });
};
Если вы заметили ошибку или хотите чем-то дополнить статью, вы всегда можете или написать нам об этом на Гитхабе, или поправить статью с помощью prose.io.