Задача Gulp, не ожидающая завершения предыдущей задачи

У меня есть задача 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 и файл манифеста написаны правильно, но вторая задача выполняется, не дожидаясь записи файла манифеста, таким образом захватывая неправильное содержимое файла манифеста (то, что было при предыдущем выполнении) .


person Ronnie    schedule 27.05.2015    source источник


Ответы (1)


Ваша задача scripts не возвращает никакого значения. Когда вы ничего не возвращаете, gulp не может узнать, когда задача завершена, поэтому переходит к следующей.

просто скажи

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

Если ваша задача выполняет что-то другое, кроме линии gulp pipe, вы можете вручную вызвать обратный вызов, который передается задаче в качестве параметра:

gulp.task('someTask', function(done) {
...
done();
}
person Mo Valipour    schedule 27.05.2015
comment
Спасибо, забыл добавить обратный звонок. - person Ronnie; 28.05.2015