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