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

标签 javascript asynchronous gulp config

我试图通过允许对专用文件进行简单配置来在 Gulp API 上实现抽象层。

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

这是gist (从我的私有(private)来源简化)。

然而,当我做 gulp build ,它不调用 TestHandler发挥应有的作用。经过一段时间的调试,我发现一切(包括变量赋值等)都工作得很好,但它不会执行返回的 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返回函数(将分别同时和串行执行它们的参数)。它们旨在用于任务定义(需要函数的地方)或直接调用。

this GitHub issue了解更多细节和解释。

解决方案

执行parallel返回的函数

    return parallel(...fns)();

附加问题:pipeline 的问题

您似乎正在尝试使用 pipeline 在这里,这不是一个坏主意,但是您的 pipeline变量未正确定义。const pipeline = require('readable-stream');使pipeline类型 Readable .这是default export of the readable-stream package .

你可能想要这个
const { pipeline } = require('readable-stream');

关于javascript - Gulp 自定义函数返回并行不会做任何事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60513640/

相关文章:

gulp - 我如何 gulp.src 整个文件夹及其子文件夹,然后 gulp.dest 基于文件的位置?

javascript - 查询 |分离(),追加()范围

javascript - 想要在一行 jquery 代码中更改 css 的 2 个或多个属性,我该怎么做?

javascript - 实现 getOrCreate 方法异步问题

python - Python (Django) 应用程序中的线程化 SOAP 请求?

javascript - 在 Gulp 中使用 Yargs

wordpress - 轻松移动环境:deploybot,docker还是手动grunt/gulp设置?

javascript - preventDefault 无法循环通过已移动的 <li>

javascript - 对 Javascript 层次结构行为感到困惑(给出示例代码)

c# - Async/Await 如何处理 "old"结果?