我有一个使用流来编写修订文件的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 模板文件。
问题是第二个任务在等待清单文件被写入时不会执行,因此会抓取错误的清单文件内容(上一次执行的内容)。