Gulp任务不等待完成上一个任务

时间:2015-05-27 21:03:53

标签: javascript gulp gulp-watch gulp-rev

我有一个gulp任务,它使用流来编写修改后的文件(使用gulp-rev)和另一个使用先前编写的清单文件来替换html文件中的变量的任务。

我的第一个任务:

gulp.task('scripts', function() {
  // other stuff...
  var b = browserify(mainscript);
  b.external('External')
    .transform(babelify)
    .bundle()
    .pipe(source('app.js'))
    .pipe(buffer())
    .pipe(rev())
    .pipe(gulp.dest(dest))
    .pipe(rev.manifest({
      path: 'appjs-manifest.json'
    }))
    .pipe(gulp.dest(dest))
}

上一个任务,将编写一个名为'app-34f01b9d.js'的文件和一个清单文件'appjs-manifest.json',其中包含:

{
  "app.js": "app-34f01b9d.js"
}

理论上,我的第二个任务应该在开始之前等待完成第一个任务:

gulp.task('renameindex',['scripts'], function () {
    var paths = gulp.paths;
    var jsonContent = JSON.parse(fs.readFileSync(paths.buildDest+'/public/scripts/appjs-manifest.json', 'utf8'));
    var src=paths.srcDir+"/index.hbs";
    var appjs=jsonContent["app.js"];
    console.log("app.js",appjs)
    return gulp.src(src)
            .pipe(handlebars({appjs:appjs}, null))
            .pipe(rename('index.html'))
            .pipe(gulp.dest(paths.buildDest));

});

任务应该读取清单文件并将“app-34f01b9d.js”替换为生成文件“index.html”的手柄模板中的变量{appjs}}。

javascript文件和清单文件写得正确但执行第二个任务而不等待清单文件写入因此抓取错误的清单文件内容(其中一个)以前的执行)。

1 个答案:

答案 0 :(得分:3)

您的scripts任务未返回任何值。当你没有返回任何东西时,gulp无法知道任务何时完成,因此继续下一个任务。

简单地说

gulp.task('scripts', function() {
  // other stuff...
  var b = browserify(mainscript);
  return b.external('External')
    ...

如果您的任务正在执行gulp pipe line以外的操作,您可以手动调用作为参数传递给任务的回调:

gulp.task('someTask', function(done) {
...
done();
}