Я пытаюсь реализовать уровень абстракции поверх API Gulp, позволяя легко настраивать выделенный файл.
Чтобы подвести итог, у меня есть функция (builder
), которая требует этот файл (gulpconfig.js
) и вызывает функции, которые возвращают ReadableStream
s из объекта, который файл конфигурации экспортирует с parallel()
.
Вот гист (упрощенно из моего частного источника).
Однако, когда я выполняю gulp build
, он не вызывает функцию TestHandler
, как следует. После некоторой отладки я обнаружил, что все (включая присвоение переменных и т. Д. c) работает отлично, но просто не выполнит возвращенный экземпляр parallel()
.
Как я могу исправить это поведение?
Вот фрагменты кода из GitHub Gist:
gulpfile.js
:
/* REQUIRES */
const { parallel } = require('gulp');
const user = require('./gulpconfig');
let params = {};
let fns = [];
async function builder() {
for (let [name, props] of Object.entries(user.config)) {
let fnName = name;
let fn = user[fnName];
let src = props.src;
let dest = props.dest;
params[fnName] = { src, dest };
fns.push(fn);
}
user.paramCp(params);
return parallel(...fns);
}
exports.build = builder;
gulpconfig.js
:
/* REQUIRES */
const { src, dest, on, watch } = require('gulp');
const pipeline = require('readable-stream');
/* USER CONFIG */
exports.config = {
testHandler: {
src: "./input/*",
dest: "./output/",
},
};
/* LOCAL PARAM HANDLER. USED INTERNALLY. */
var params;
exports.paramCp = _params => {
params = _params;
};
var tSrc;
var tDest;
function getParams() {
let obj = params[getParams.caller.name];
tSrc = obj.src;
tDest = obj.dest;
}
/* HANDLERS. DEFINED BY handler KEY IN CONFIG */
exports.testHandler = function testHandler() {
getParams(); // You can now use tSrc and tDest
return pipeline(src(tSrc), dest(tDest));
};