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

ufj5ltwl  于 2023-09-28  发布在  Gulp
关注(0)|答案(1)|浏览(257)

我有这个奇怪的问题与gulp,这可能是由于我不知道如何真正使用它,但我没有取得任何进展,通过阅读文档。基本上,我正在开发一个应用程序,有3个不同的环境,和5个不同的模板,它应该呈现。这个图是这样的

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

这意味着它正在动态地生成新任务(例如当一个新的模板被添加),但我总是有问题与异步完成。
无论我做什么调整,我总是得到“The following tasks did not complete”的错误(即使renderTemplate返回一个promise,但查看日志,它甚至从来没有被调用过...?)
有人能给我指个正确的方向吗?我做错了什么
我在操场上又试了一次,从头开始重写,我还是想不出为什么会这样。下面是我的示例代码:

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?
cngwdvgl

cngwdvgl1#

在深入研究其他一些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)
}

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

相关问题