Инструмент для манипуляции уровнями переопределений для ENB позволяет создавать уровни на основе уже существующих.
Текущая реализация основана на симлинках. Это означает, что созданный уровень будет состоять из симлинок на файлы исходных уровней.
npm install --save-dev enb-bem-pseudo-levels
Для работы модуля требуется зависимость от пакета enb
версии 0.15.0
или выше.
Для того, чтобы выполнить манипуляцию над уровнями, следует:
- Задать список исходных уровней, на основе которых будут производиться манипуляции.
- Задекларировать resolve-функцию по пути до нового уровня.
- Запустить процесс сборки новых уровней.
Пример того, как скопировать nested
-уровень и положить его на файловую систему в simple
-стиле:
var pseudo = require('enb-bem-pseudo-levels');
module.exports = function (config) {
var dstpath = config.resolvePath('pseudo-level'); // путь до нового уровня
// Создаём таск с названием `pseudo`, для манипуляций с уровнями.
config.task('pseudo', function () {
var args = [].slice.call(arguments, 1).map(function (arg) {
return config.resolvePath(arg);
}); // Получаем список целей, которые хотим
// построить в новом уровне. Если список пуст
// уровень будет построен полностью.
return pseudo(getLevels(config)) // Сканируем исходные уровни. (1)
.addBuilder(dstpath, resolve) // Задаём путь и resolve-функцию (2)
.build(args); // Строим новый уровень (3)
});
};
/**
* Функция применяется для каждого файла найденного на исходных уровнях `levels`
*
* @param file информация о текущем файле
* @param levels список исходных уровней
* @param dstpath путь до нового уровня
*/
function resolve (file, levels, dstpath) {
return [{
sourcePath: file.fullname, // путь до исходного файла
targetPath: path.join(dstpath, file.name) // путь до нового файла
}];
}
function getLevels (config) {
return [
'source-level'
].map(function (level) {
return config.resolvePath(level);
});
}
Запускаем описанный в таске скрипт манипуляции с уровнями pseudo
:
$ ./node_modules/.bin/enb make pseudo
© 2014 YANDEX LLC. Код лицензирован Mozilla Public License 2.0.