Пользовательская функция Gulp, возвращающая параллель, ничего не сделает - PullRequest
4 голосов
/ 03 марта 2020

Я пытаюсь реализовать уровень абстракции поверх 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));
};

1 Ответ

1 голос
/ 08 марта 2020

Это ожидается для Gulp.

gulp.parallel и gulp.series возвращаемые функции (которые будут одновременно и последовательно выполнять свои аргументы соответственно). Они предназначены для использования в определениях задачи (где ожидается функция) или для непосредственного вызова.

См. этот выпуск GitHub для более подробной информации и объяснения.

Решение

Выполнить функцию, возвращаемую parallel

    return parallel(...fns)();

Дополнительная проблема: проблема с pipeline

Похоже, вы пытаясь использовать pipeline здесь, что неплохая идея, но ваша переменная pipeline не определена правильно. const pipeline = require('readable-stream'); составляет pipeline типа Readable. Это экспорт по умолчанию readable-stream пакета .

Вы, вероятно, хотите это

const { pipeline } = require('readable-stream');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...