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.parallel
和 gulp.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');
我正在尝试通过允许在专用文件上轻松配置来在 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.parallel
和 gulp.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');