运行 在 Gulp 任务中多次操作把手

Running Handlebars multiple times within a Gulp task

我正在尝试创建一个 Gulp 任务,将两个 Handlebars 进程应用到一个 src。
第一个过程使用外部 JSON 数据源并填充模板。然后对于一个额外的过程,我想用我的 gulpfile 中计算的值来解析模板中的另一个表达式。 然后将生成的模板重命名并输出到目的地。

每个进程独立工作,但当我尝试将它们组合成一个任务时,只有第一个 Handlebars 进程是 运行。

gulp.src('handlebars/pagetemplate.hbs')
  .pipe( handlebars(dataSrc1, options) )
  .pipe( handlebars(dataSrc2, options) )   
  .pipe( rename('page.html') )
  .pipe( gulp.dest('outputfolder/') );

我是不是误解了 Gulp 的管道流是如何工作的?我有想法先合并两个 JSON 来源,然后使用 Handlebars 进行解析,但我不确定上述上下文中的语法。

您可能需要合并两个 管道 / :

// npm install --save-dev gulp merge-stream

var gulp = require('gulp');
var merge = require('merge-stream');

gulp.task('test', function() {
  var bootstrap = gulp.src('bootstrap/js/*.js')
    .pipe(gulp.dest('public/bootstrap'));

  var jquery = gulp.src('jquery.cookie/jquery.cookie.js')
    .pipe(gulp.dest('public/jquery'));

  return merge(bootstrap, jquery);
});

自豪地复制自 Gulpjs - using-multiple-sources-in-one-task

您的代码不起作用的原因是,在第一个 handlebars() 之后,您的流中不再有 Handlebars 模板。所有 {{placeholder}} 表达式都已被替换,您只剩下 HTML。所以第二个 handlebars() 实际上不能再做任何事情了。

I have had the idea to merge the two JSON sources first and then parse with Handlebars

这是正确的方法。

假设您的第一个数据源是一个文件 data.json,第二个数据源是在您的 Gulpfile 中计算的。您可以使用 merge 包来合并两者:

var merge = require('merge');

gulp.task('default', function() {
   var dataSrc1 = require('./data.json');
   var dataSrc2 = {
      count: 40 + 2
   };

   var dataSrc = merge.recursive(true, dataSrc1, dataSrc2);

   return gulp.src('handlebars/pagetemplate.hbs')
     .pipe(handlebars(dataSrc, options))
     .pipe(rename('page.html'))
     .pipe(gulp.dest('outputfolder/'));
});