1

最近 gulp 4 にアップグレードしましたが、エクスポート プロセスに関する長年の問題を解決しようとしています。

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

プロジェクト全体をエクスポートしたい現在の状況targetでは、gulpfile の変数を手動で変更してから、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問題は、ループ内で gulp タスクを呼び出す方法が見つからないように見えることです。これを行う方法はありますか、それとも回避策が必要ですか?

4

1 に答える 1

1

呼び出しによって、タスクgulp.series('export')がすぐに開始されるわけではありません。タスクexportを開始するために呼び出す必要がある関数を返すだけです。export

exportただし、返された関数を呼び出しても、タスクはすぐには開始されません。関数は非同期です。後で初めてexportタスクが実際に開始されます。

一連のコレクションの各要素に対して非同期関数を実行する最も簡単な方法は、パッケージeachSeries()によって提供される関数を使用することです。async

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);
});
于 2016-10-23T08:40:22.920 に答える