2016-07-25 12 views
0

Node.jsTypescriptアプリケーションを構築するのにGulpを使用しています。2回の反復でGulpファイル処理

私の目的のために、すべてのファイル.tsをスキャンし、情報を取得してから、この情報を.tsファイルの一部に追加する必要があります。

私はファイルハンドラをpipe()に挿入するためにgulp-modifyを使用しています。

gulp.task(...., function() { 
    return gulp.src('*.ts') 
     .pipe(modify(statisticsProccesor)) 
     .pipe(modify(injectData)) 
     .pipe(gulp.dest(...)) 
}); 

statisticsProccesorinjectDataは、ソースストリームから正確なファイルを処理するfunction(file, content)実装されています。

このアプローチを使用すると、ソースからいくつかの統計を取得できます。しかし、gulp.src()がすべてのファイルを1つずつ処理し(すべてのハンドラも呼び出しているため)、私はそれを取り戻すことができません。

私は2つのファイル1.ts2.tsを持っていたら、このタスクは、このような順序でそれを処理します:

1.ts: statisticsProccesor(), injectData() 
2.ts: statisticsProccesor(), injectData() 

私は、このような魔法を行う必要がありながら:

1.ts: statisticsProccesor() 
1.ts: statisticsProccesor() 
2.ts: injectData() 
2.ts: injectData() 

私は2を追加しようとしましたタスクへのコマンドはgulp.src().pipe(modify)です。また、これらの部分を2つの異なるタスクに分けて、1つずつ起動します。しかしGulpは実行を最適化するので、ソースを前処理して二度反復することはできません。

+1

あなたは** **二つのタスクでこれを行うことができます。実行順序を正しくヒントする必要があります:http://stackoverflow.com/questions/22824546/ –

答えて

0

前述のように、タスクをいくつかの依存するタスクに分類する必要があります。

gulp.task('doGood, ['subDo'], function(callback) { 
    gulp.src('*.ts') 
     .pipe(modify(statisticsProccesor)) 
     .on('finish', callback); 
}); 

gulp.task('subDo', function(callback) { 
    gulp.src('*.ts') 
     .pipe(modify(injectData)) 
     .pipe(gulp.dest(...)); 
}); 

gulp doGood 

いくつかの重要な事柄:

1. `subDo` should not return the stream 
2. `subDo` should contain `on('finish')` instruction