2016-10-21 14 views
0

最近、gulp 4にアップグレードしました。私はエクスポートプロセスに関する長年の問題を解決しようとしています。gulpで別のタスクから繰り返しタスクを起動する方法4

要するに私のプロジェクトには3つ(またはそれ以上)の独立したフォルダがあります。独立して私は彼らがそれぞれ彼ら自身のbundle.jsとglobal.cssファイルを持っていることを意味します。私はtargetに必要なすべてのパスを作成するためにgulpfileにtargetという変数を設定しました。

プロジェクト全体をエクスポートしたいときは、gulpfileの変数targetを手動で変更してから、exportタスクを実行する必要があります。

私は次のように動作し、何か(other_folders配列を変えることができるよう)

/*---------- Exports current target ----------*/ 
gulp.task('export', gulp.series(to_prod,'export_files', 'export_scripts_and_styles', 'export_fonts', 'export_core')); 

/*---------- Exports all targets ----------*/ 
gulp.task('export_all', function(done){ 
    var needs_exporting = other_folders.concat("website"); 

    needs_exporting.forEach(function(export_this){ 
     target = export_this; 
     set_paths(); 

     // Here it needs to fire the generic export task 
     gulp.series('export'); 
    }); 

    done(); 
}); 

問題は、私はforEachループでゴクゴクタスクを呼び出す方法を見つけるように見えることができないということですが必要です。これを行う方法はありますか、回避策が必要ですか?

+1

が重複する可能性を()のdoesn」タスクを実行する](http://stackoverflow.com/questions/39902010/gulp-series-doesnt-run-tasks) –

+0

@SvenSchoenungこれは私の問題を部分的に解決しましたが、最初のタスクの後に次の「エクスポート」タスクを実行する必要があります1つは終わった。何か案は? – NealVDV

答えて

1

gulp.series('export')を呼び出すとすぐにexportタスクが開始されません。 exportタスクを開始するために呼び出す必要がある関数を返します。

しかし、返された関数を呼び出すと、すぐにexportタスクが開始されません。この関数は非同期です。後で実行されるのはexportタスクです。

シリーズのコレクションの各要素に対して非同期関数を実行する最も簡単な方法は、asyncパッケージで提供されますeachSeries()機能を使用することです:[gulp.seriesの

var async = require('async'); 

gulp.task('export_all', function(done){ 
    var needs_exporting = other_folders.concat("website"); 

    async.eachSeries(needs_exporting, function(export_this, cb) { 
     target = export_this; 
     set_paths(); 

     gulp.series('export')(cb); 
    }, done); 
}); 
+0

完璧に作業しました!私の質問を編集しても、正しく質問する方法を学んでくれてありがとう。 – NealVDV

関連する問題