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

4

我有一个使用流来编写修订文件的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" 替换为变量 {appjs},生成一个名为 "index.html" 的 handlebar 模板文件。

问题是第二个任务在等待清单文件被写入时不会执行,因此会抓取错误的清单文件内容(上一次执行的内容)。

1个回答

3
你的 scripts 任务并未返回任何值。当你不返回任何内容时,Gulp 无法知道任务何时完成,因此继续执行下一个任务。
简单来说,这意味着你需要在你的任务中返回值,以便 Gulp 知道何时任务完成。
gulp.task('scripts', function() {
  // other stuff...
  var b = browserify(mainscript);
  return b.external('External')
    ...

如果您的任务不是针对gulp管道操作,那么可以手动调用传递给该任务的回调函数:

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

谢谢,忘记添加回调函数。 - Ronnie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接