2015-10-06 22 views
27

私はタスクの前に実行される依存関係を宣言することができます。別のタスクからgulpタスクを実行するにはどうすればよいですか?

gulp.task('a',() => {}); 
gulp.task('b',() => {}); 
gulp.task('c', ['a', 'c'],() => {}); 

タスク「a」と「b」タスク「C」の後に毎回実行されると呼ばれ、タスク「C」の前に実行されます。

ただし、gulp.taskから任意のタスクをプログラムで呼び出すにはどうすればよいですか。

答えて

-5

これを行うにはいくつかの方法があります。 最初の1:ちょうど他のための新しいタスクコールを呼び出す:

gulp.task('foo', function() { 
    gulp.task('caller', ['bar']); // <- this calls the other existing task! 
} 
gulp.task('bar', function() { 
    //do something 
} 

秒、1少ないクリーナー:ガルプはJavascriptがあるが、あなたのこれだけいくつかの命令をランダムな関数として設定し、それを呼び出します。

gulp.task('task', function() { 
    recurrent_task(); 
} 
gulp.task('task2', function() { 
    recurrent_task(); 
} 
function recurrent_task() { 
    //do something 
} 
+7

これは私だけですか?これは単に機能しませんか? – Tomasz

+1

最初のものは機能しません – StingyJack

+1

最初の提案は、コールバック関数を持たないで、グルップタスクを登録するだけなので、うまくいきません。 – joeycozza

42

gulp.start()を使用して行いました。このように:

gulp.task('test1', function(){ 
    gulp.start('test2'); 
}) 

gulp.task('test2', function(){ 
    // do something 
}) 

私はそれが重要であれば、3.9.1を使用していました。 gulp.start()のように見えますが、削除または廃止される可能性があります。しかしそれはまだ起こっていない。


更新 私は別々の機能に物事を破るした場合Novellizatorが示唆したように、それはこのようなものになるだろう:

function doSomething(){ 
    // do something 
} 

gulp.task('test1', function(){ 
    doSomething(); 
}) 

gulp.task('test2', function(){ 
    doSomething(); 
}) 

それは簡単で、一気の使用を避けることができます。開始()。

+2

「タスクを機能に分割し、必要に応じて他のタスクでそれらを再利用する」前述の問題からアドバイスを受け取ります – Novellizator

+0

私はgulpをインストールしました。しかし、私は以下に述べる選択肢を列挙します。 – Callat

+1

私の時間を救ってくれてありがとう。それは私のためにうまくいった! –

1

上記のJeffryHouserは次の方法を使用して動作しますが、廃止予定であり、今後のバージョンでは削除される予定です。私はちょうど3.9.1で次のように試みました。

コード:

// Variables 
var gulp = require('gulp'); 
var less = require('gulp-less'); 
var watch = require('gulp-watch'); 


// Task to compile less -> css: Method 1- The bad way 
gulp.task('default', function(){ 
    gulp.src('src/*.less') 
    gulp.start('lessToCss'); 
}); 

gulp.task('lessToCss', function() { 
    gulp.src('src/*.less') 
    .pipe(less()) 
    .pipe(gulp.dest('src/main.css')); 
}); 

Novellizatorによってコメントで述べた第二の方法は次のとおりです。

の作品「あなたがする必要がある場合は他のタスクでそれらを再利用し、その後、関数にタスクを破ります」前述の問題からアドバイス

私はlazypipe()https://www.npmjs.com/package/lazypipe

を使用することにより、これを行います

コード:

// Variables 
var gulp = require('gulp'); 
var less = require('gulp-less'); 
var watch = require('gulp-watch'); 

var lazypipe = require('lazypipe'); 
var fixMyCSS = lazypipe() 
    .pipe(less); // Be CAREFUL here do not use less() it will give you an errror 



// Task to compile less -> css: Method 2 - The nice way 
gulp.task('default', function(){ 
    //gulp.start('lessToCss'); 
    gulp.src('src/*.less') 
    .pipe(fixMyCSS()) 
    .pipe(gulp.dest('src/main.css')); 
}); 

簡単な比較

方法1次が得られる:

  • 'デフォルト' を開始しています...
  • [午前22時59分12秒] 'lessToCss'を開始しています...完了する61ミリの合計48ミリ秒

後13ミリ秒

  • [午前22時59分12秒]仕上がり 'lessToCss' [午前22時59分12秒]仕上がり 'デフォルト'

    方法2? - [23時03分24秒] 'デフォルト' を開始しています... - [23時03分24秒] 38ミリ

    実際にその半分のために

    38ミリ秒で終了した後、 'デフォルト' の差23ms

    これはどうしてですか?私は正直なところ、言いたいことについては十分に分かっていませんが、方法2は明らかに読みやすく保守性があり、より速い選択肢であるとしましょう。

    lazypipe()のストリームを直接呼び出さないことを理解している限り、どちらも書き込みが簡単です。

  • +1

    これは、@ Novellizatorのコメントの解釈が私の介入よりも複雑です。代わりの方法を含めるように答えを修正しました。特に異なるコードを実行しているので、パフォーマンス統計を単独で評価するのは難しいです。 lessToCssが増分アプローチを使用する場合、2回目の実行は最初の実行より速くなることが期待されます。 – JeffryHouser

    0

    他の回答から「しない」という一般的なテーマでは、あなたのやっていることによって異なります。

    あなたが考えている場合:

    gulp.task("a",() => { 
        doSomethingInstant() 
        return doTaskB() 
    }) 
    

    をあなたはしたい:あなたはメタ」の非同期(async)何もしていないので、もし、すべてのタスクは、順序で起動されているので、

    gulp.task("meta-a",() => { 
        doSomethingInstant() 
    }) 
    gulp.task("a", ["meta-a", "b"]) 
    

    は、これは動作します-a "を入力すると、" b "が始まる前に終了します。それが非同期ならば、もっと明示する必要があります:

    gulp.task("meta-a",() => { 
        return doSomethingAsync() 
    }) 
    function taskB() { 
        // Original task B code... 
    } 
    gulp.task("b", taskB) 
    gulp.task("a", ["meta-a"], taskB) 
    
    関連する問題