2016-06-16 8 views
0

私はgulp 4.0を使用します。Gulp.js時計と同じタスク、異なる並列タスク

gulp.task("watch", function() { 
    gulp.watch("scss/*.scss", gulp.series("sass")).on("unlink", function(filepath) { 
     remember.forget("sass", path.resolve(filepath)); 
     delete cached.caches.sass[path.resolve(filepath)]; 
    }); 
    gulp.watch("templates/**/*.jade", gulp.series("jade")).on("unlink", function(filepath) { 
     remember.forget("jade", path.resolve(filepath)); 
     delete cached.caches.jade[path.resolve(filepath)]; 
    }); 
}); 

だから、私は同じ2つのラインを持っている:それは、パイプラインだった場合

remember.forget("jade", path.resolve(filepath)); 
delete cached.caches.jade[path.resolve(filepath)]; 

は、新しいタスクを作成することは容易で、かつ、それらを実行しますと、私は、この'watch'タスクを持っています。しかしここでは、私は引数(パラメータ) - filepathを持っています。

質問は次のとおりです。どのように1つのタスクに置き換えることができますか?これらの2つの行の繰り返しなし。

答えて

1

質問:私はそれを1つのタスクに置き換えることができますか?

できません。タスクは引数を取ることができません。上記のコードは、あなたがsassjadeタスクを実行する前に、sassjadeキャッシュをクリアすることを前提としていること

function runTask(taskName) { 
    return function(evt, filepath) { 
    if (evt === "unlink") { 
     remember.forget(taskName, path.resolve(filepath)); 
     delete cached.caches[taskName][path.resolve(filepath)]; 
    } 
    gulp.series(taskName)(); 
    }; 
} 

gulp.task("watch", function() { 
    gulp.watch("scss/*.scss").on("all", runTask("sass")); 
    gulp.watch("templates/**/*.jade").on("all", runTask("jade")); 
}); 

注:あなたの唯一のオプションは、関数を作成することです。それがあなたの周りの他の方法なら、それに応じて調整する必要があります。

+0

ありがとうございます!正確に私が必要なのは何ですか、これについてはどうすればいいですか:https://jsfiddle.net/AleshaOleg/hmdkbm7k なぜ、これは私の仕事をしていませんか? – AleshaOleg

+0

あなたの仕事を実行します。しかし、 'unlink'イベントのためだけに関数を登録しているので、ファイルを削除するときだけです。 –

+0

イベント 'all'があると、ファイル名が定義されているからです。しかし、 'unlink'にイベントを残すと、' filename'は定義されません。どこに問題があるのか​​分かりますか? – AleshaOleg

関連する問題