Gulp 返回并行的自定义函数不会做任何事情

Gulp custom function returning parallel won't do anything

我正在尝试通过允许在专用文件上轻松配置来在 Gulp API 上实现抽象层。

总而言之,我有一个函数 (builder) 需要该文件 (gulpconfig.js) 并从一个对象调用 return ReadableStream 的函数配置文件导出 parallel()

这是 gist(从我的私人来源简化而来)。

但是,当我执行 gulp build 时,它没有按应有的方式调用 TestHandler 函数。调试一段时间后,我发现一切(包括变量赋值等)都工作得很好,但它不会执行 returned 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));
};

这是 Gulp 的预期结果。

gulp.parallelgulp.series return 函数(它们将分别同时和串行执行它们的参数)。它们旨在用于任务 definitions(需要函数的地方)或直接调用。

有关详细信息和说明,请参阅 this GitHub issue

解决方案

执行return由parallel编辑的函数

    return parallel(...fns)();

其他问题:pipeline

的问题

看起来你想在这里使用 pipeline,这不是个坏主意,但你的 pipeline 变量没有正确定义。 const pipeline = require('readable-stream'); 使 pipeline 成为 Readable. This is the default export of the readable-stream package 类型。

你可能想要这个

const { pipeline } = require('readable-stream');