4

ストリームを使用して ( 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 番目のタスクが実行され、間違ったマニフェスト ファイルの内容(前の実行の内容) が取得されます。

4

1 に答える 1

3

あなたのscriptsタスクは値を返しません。何も返さない場合、gulp はタスクがいつ終了したかを知る方法がないため、次のタスクに進みます。

簡単に言うと

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

タスクが gulp パイプ ライン以外の処理を行っている場合は、タスクにパラメーターとして渡されるコールバックを手動で呼び出すことができます。

gulp.task('someTask', function(done) {
...
done();
}
于 2015-05-27T21:30:09.460 に答える