我在 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?
在深入研究其他一些 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)
}
这将像我想要的那样工作,并且执行日志也遵循我的预期图表。