2015-05-27 5 views
3

У меня есть задача gulp, которая использует потоки для записи пересмотренного файла (с использованием gulp-rev) и другой задачи, которая использует ранее написанный файл манифеста для замены переменных в html-файле.Задача Gulp не дожидаться завершения предыдущей задачи

Моя первая задача:

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)) 
} 

предыдущей задачи, запишет файл с именем что-то вроде 'приложение-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».

Что происходит, что Java-файл и файл манифеста написаны правильно, но вторая задача выполняется, не дожидаясь файл манифеста должен быть записан таким образом, захватывая неправильно манифеста содержимое файла (один из предыдущего выполнения).

ответ

3

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

просто сказать

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

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

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

Спасибо , забыл добавить обратный вызов. – Ronnie

Смежные вопросы