ストリームを使用して ( gulp-revを使用して)改訂されたファイルを書き込む gulp タスクと、以前に作成されたマニフェスト ファイルを使用して 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"
}
私の 2 番目のタスクは、理論的には、開始する前に最初のタスクの完了を待つ必要があります。
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" を、ファイル "index.html" を生成するハンドルバー テンプレートの変数 {appjs}} に置き換える必要があります。
javascript ファイルとマニフェスト ファイルは正しく書き込まれますが、マニフェスト ファイルが書き込まれるのを待たずに 2 番目のタスクが実行され、間違ったマニフェスト ファイルの内容(前の実行の内容) が取得されます。