gulp:生成新任务并正确使用串行/并行#2732

问题描述 投票:0回答:1

我在 gulp 上遇到了这个奇怪的问题,这可能是因为我不明白如何真正使用它,但我没有通过阅读文档取得任何进展。 基本上,我正在开发一个具有 3 个不同环境和 5 个不同模板的应用程序,它应该呈现这些模板。 图表将是这样的:

default:
  - env 1
    - template 1
    - template 2
    ...
  - env 2
    - template 1
    - template 2
    ...

这意味着它正在动态生成新任务(例如,当添加新模板时),但我总是遇到异步完成问题。

无论我如何调整和调整,我总是收到“以下任务未完成”错误(即使 renderTemplate 返回一个承诺,但查看日志它甚至从未被调用......?)

有人能指出我正确的方向吗?我做错了什么。

我在操场上再次尝试并从头开始重写,但我仍然无法弄清楚为什么会发生这种情况。 这是我的示例代码:

const {
    src,
    dest,
    series
} = require('gulp');
const {
    setTimeout
} = require('timers/promises')

const env = ['1', '2', '3'];
const template = ['1', '2', '3'];

function renderEnv(info) {
    console.debug('renderEnv', info);
    const funcs = template.map(n => mod(renderTemplate, n));
    return series(...funcs);
}

function renderTemplate(info) {
    console.debug('renderTemplate', info);
}

// this mods params to bind with correct args while keeping the name
function mod(func, args, name) {
    const argArray = Array.isArray(args) ? args : [args];
    const newFunc = func.bind(null, ...argArray);
    newFunc.displayName = name || func.name;
    return newFunc;
}

function defaultFunc() {
    const funcs = env.map(n => mod(renderEnv, n));
    return series(...funcs)
}

exports.default = series(defaultFunc());

这是错误:

Starting 'default'...
Starting 'renderEnv'...
renderEnv 1
The following tasks did not complete: default, <series>, renderEnv
Did you forget to signal async completion?
node.js gulp
1个回答
0
投票

在深入研究其他一些 GitHub 问题时,我终于明白 gulp 并不期望任务返回另一个系列(又名函数)。 所以我必须用这个替换 renderEnv :

function renderEnv(info, done) {
  console.debug('renderEnv', info);
  const funcs = template.map(n => mod(renderTemplate, n));
  return series(...funcs)(done); // (or parallel)
}

这将像我想要的那样工作,并且执行日志也遵循我的预期图表。

© www.soinside.com 2019 - 2024. All rights reserved.