gpt4 book ai didi

javascript - 在 Node.js/Gulp 中重用流管道/子管道

转载 作者:搜寻专家 更新时间:2023-10-31 23:25:05 25 4
gpt4 key购买 nike

从 streams/gulp/vinyl 开始并尝试使用 stream-combiner2 清理/干燥我的 gulpfile .到目前为止它运行良好,除了现在我需要在另一个管道内运行一个子管道(简化的伪代码):

var logger = require("gulp-logger"),
HTMLPrettify = require("gulp-html-prettify"),
combiner = require("stream-combiner2"),
through = require("through2"),
tap = require("gulp-tap"),
_ = require("lodash");


preprocessPipeline = function() {
return combiner.obj(getFrontMatter(), processTemplates());
};


gulp.task("build", ["clean"], function() {
return gulp.src("in/**/*.html")
.pipe(preprocessPipeline())
.pipe(tap(function(file) {
var data, dataSources;
dataSources = getDataSources(file);
data = {};

/* PAUSE MAIN PIPELINE HERE */
/* RUN THIS SUB PIPELINE BELOW */
gulp.src(dataSources)
.pipe(preprocessPipeline())
.pipe(tap(function(file) {
_.merge(data, file.data);
}));

file.data = data;
/* RESUME MAIN PIPELINE */
}))
.pipe(HTMLPrettify())
.pipe(gulp.dest("out"));
});

如您所见,在主“构建”管道内,我尝试对主管道中的每个乙烯基文件对象执行以下操作:

  • 暂停执行主要“构建”管道
  • 通过同步getDataSources()函数获取当前黑胶唱片的数据源路径
  • 使用另一个子管道处理这些数据源路径,重用 preProccessPipeline 并最终合并它们的数据
  • 最后将来自数据源的合并数据添加到主管道中的 vinyl 文件中,并在主管道中继续执行

gulp.src() 看起来是将这些数据源文件加载到子管道中的完美方式,但主管道似乎在子管道开始之前完成。

另外,我开始意识到也许我的管道看起来像同步函数流,而且很可能我遗漏了 stream/node.js 难题的关键部分。

帮助我重用管道但不重用子管道的相关文档:

相关问题:

谢谢。

最佳答案

似乎您正在使用 gulp 作为某种模板引擎 — 完全可行。

Gulp 允许您指定哪些任务依赖于其他任务,因此您可以将该子管道分解为一个新任务,例如 “buildDataFiles”,然后让您的构建任务依赖于该任务,即

gulp.task("build", ["buildDataFiles", "clean"], function(){

但这种方法的问题是,正如您所说,“在处理模板之前,不可能知道与模板文件关联的数据文件。”如果你确定没有办法解决这个问题,那就更棘手了。相反,如果您将主管道分解为 "processTemplate" 任务,那么 "build" 任务将只处理子管道但依赖于 "processTemplate “?它可能看起来像这样:

gulp.task("processTemplate", ["clean"], function() {
gulp.src("in/**/*.html")
.pipe(preprocessPipeline())
.pipe(gulp.dest("build/temp"));
}

gulp.task("build", ["processTemplate"], function() {
gulp.src("build/temp/*.html")
.pipe(tap(function(file) {
var data, dataSources;
dataSources = getDataSources(file);
data = {};

gulp.src(dataSources)
.pipe(preprocessPipeline())
.pipe(tap(function(file) {
_.merge(data, file.data);
}));

file.data = data;

}))
.pipe(HTMLPrettify())
.pipe(gulp.dest("out"));
}

看起来确实很相似,但是您遇到的问题要求先处理模板,然后再处理数据文件。我会尝试查看 gulp-consolidate ,它可能会帮助你。

关于javascript - 在 Node.js/Gulp 中重用流管道/子管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27425131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com