如何将这两个Gulp任务合并为一个?

时间:2016-04-20 14:52:08

标签: javascript gulp gulp-concat

现在我有两项任务:templatesjstemplates必须先运行才能通过js获取更改。我想结合这些,消除中间文件,以便任务的工作方式如下:

  1. 将模板编译并连接到一个JS
  2. 块中
  3. 将该块与我的应用程序的其余JS代码
  4. 连接起来
  5. 将整个内容输出为单个文件
  6. 我该怎么做?

    这是我目前的代码:

    var gulp         = require('gulp');
    var handlebars   = require('gulp-handlebars');
    var concat       = require('gulp-concat');
    var wrap         = require('gulp-wrap');
    var declare      = require('gulp-declare');
    
    // Compile Handlebars templates into JS
    gulp.task('templates', function() {
      return gulp.src('./templates/*.hbs')
        .pipe(handlebars({
            handlebars: require('handlebars')
        }))
        .pipe(wrap('Handlebars.template(<%= contents %>)'))
        .pipe(declare({
            namespace: 'templates',
            noRedeclare: true,
        }))
        .pipe(concat('templates.js'))
        .pipe(gulp.dest('./js/'));
    });
    
    // Concatenate and minify application JS
    gulp.task('js', function() {
      return gulp.src('./js/*.js')
        .pipe(concat('app.js'))
        .pipe(gulp.dest('./dist/js'));
    

1 个答案:

答案 0 :(得分:-1)

对我而言,最简单,最清洁的方法是使用

调用另一个任务
gulp.task('js', ['templates'], function(){
....

这样,js任务需要执行模板任务

将汇编和最终结论保存在2个单独的任务中对我来说并不坏。

请告诉我这是不是一个可行的解决方案

修改

在一个单一任务中,您可以尝试使用merge-stream

并做

var merge = require('merge-stream');
gulp.task('templates', function() {
  var jsStream = gulp.src('./js/*.js')
   .pipe(concat('all.js'));
  var templateStream = gulp.src('./templates/*.hbs')
    .pipe(handlebars({
        handlebars: require('handlebars')
    }))
    .pipe(wrap('Handlebars.template(<%= contents %>)'))
    .pipe(declare({
        namespace: 'templates',
        noRedeclare: true,
    }))
    .pipe(concat('templates.js'));

    merge(jsStream, templateStream)
    .pipe(concat('app.js'))
    .pipe(gulp.dest('./dist/js'));
});

我已经用心做了而没有尝试,所以我没有按预期工作