javascript - Gulp 自定义函数返回并行不会做任何事情
问题描述
我试图通过允许对专用文件进行简单配置来在 Gulp API 上实现抽象层。
总而言之,我有一个函数 ( builder
),它需要该文件 ( gulpconfig.js
),并调用ReadableStream
从配置文件导出的对象返回 s 的函数parallel()
。
这是要点(从我的私人来源简化)。
但是,当我这样做时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.parallel
和gulp.series
返回函数(它们将分别同时和串行执行它们的参数)。它们旨在用于任务定义(需要函数的地方)或直接调用。
有关更多详细信息和说明,请参阅此 GitHub 问题。
解决方案
执行返回的函数parallel
return parallel(...fns)();
附加问题:问题pipeline
看起来您正在尝试在pipeline
这里使用,这不是一个坏主意,但是您的pipeline
变量未正确定义。
const pipeline = require('readable-stream');
使pipeline
类型Readable
。这是包的默认导出readable-stream
。
你可能想要这个
const { pipeline } = require('readable-stream');
推荐阅读
- java - xml 文件已创建但未与 java 连接
- c - 为什么一个循环可以工作,但一个几乎相同的循环不能将数据打印到文件中?
- algorithm - 给定 n 个元素 1,2,…,n 上的二叉搜索树的后序遍历 P
- curl - 卷曲试图获取非对象的属性“access_token”
- c# - 为什么这两个代码(php/C#)的加密/解密方式不同?
- javascript - React-Redux:如何确保在发出 PUT 请求之前首先分派一个动作
- python - 如何在python中的chrome中打开URL
- excel - 获取数据透视表 VBA
- python - PyQT 在运行 pynput 函数时冻结
- java - 将java(带参数)转换为exe