【问题标题】:Gulp task not waiting the completion of the previous taskGulp 任务不等待上一个任务的完成
【发布时间】:2015-08-10 04:00:18
【问题描述】:

我有一个 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”。

发生的情况是 javascript 文件和清单文件已正确写入,但 第二个任务执行时没有等待清单文件被写入,因此抓取了错误的清单文件内容(其中之一上一次执行)。

【问题讨论】:

    标签: javascript gulp gulp-watch gulp-rev


    【解决方案1】:

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

    简单地说

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

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

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

    【讨论】:

    • 谢谢,忘记添加回调了。
    猜你喜欢
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 2015-11-16
    • 2023-03-10
    相关资源
    最近更新 更多