我意識到能夠聲明將在任務之前運行的依賴關係,例如,如何從其他任務運行吞噬任務?
gulp.task('a',() => {});
gulp.task('b',() => {});
gulp.task('c', ['a', 'c'],() => {});
任務'c'被調用後,任務'c'執行前,每次運行任務'a'和'b'。
但是,如何以編程方式從gulp.task
內調用任意任務?
我意識到能夠聲明將在任務之前運行的依賴關係,例如,如何從其他任務運行吞噬任務?
gulp.task('a',() => {});
gulp.task('b',() => {});
gulp.task('c', ['a', 'c'],() => {});
任務'c'被調用後,任務'c'執行前,每次運行任務'a'和'b'。
但是,如何以編程方式從gulp.task
內調用任意任務?
有幾個方法可以做到這一點: 第一招:只調用一個新的任務,呼籲其他:
gulp.task('foo', function() {
gulp.task('caller', ['bar']); // <- this calls the other existing task!
}
gulp.task('bar', function() {
//do something
}
第二,少清潔劑之一:咕嘟咕嘟是JavaScript,因此你只設置一些指令作爲一個隨機函數,然後調用它!
gulp.task('task', function() {
recurrent_task();
}
gulp.task('task2', function() {
recurrent_task();
}
function recurrent_task() {
//do something
}
我使用gulp.start();像這樣:
gulp.task('test1', function(){
gulp.start('test2');
})
gulp.task('test2', function(){
// do something
})
我在使用gulp 3.9.1如果它很重要。看起來像gulp.start()可能會被刪除或棄用;但還沒有發生。
更新 如果我要打破東西分成不同的功能,如Novellizator建議,這將是這樣的:
function doSomething(){
// do something
}
gulp.task('test1', function(){
doSomething();
})
gulp.task('test2', function(){
doSomething();
})
這是簡單,避免使用大口的。開始()。
「將任務分解爲函數,然後在其他任務中重用它們,如果需要」上述問題的一條建議 – Novellizator
我剛安裝了gulp並且此方法適用於我。但我會列出下面討論的替代方案。 – Callat
謝謝你節省了我的時間;它爲我工作得很好! –
正如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,得到以下:
對於總的61毫秒完成
方法2? - [23時03分24秒]啓動 '默認' ...... - [23時03分24秒]後38毫秒
成品 '默認' 幾乎一半在38毫秒
對於總差價23毫秒
現在爲什麼會出現這種情況?老實說,我不知道怎麼說,但是讓我們說方法2顯然更具可讀性,可維護性,甚至更快的選擇。
只要您明白不要直接在lazypipe()
內調用流,它們都易於編寫。
這對@ Novellizator的評論比我的介紹更復雜。我修改了我的答案,以包含一種替代方法。單獨評估性能統計數據非常困難,尤其是在您運行的代碼不同的情況下。如果lessToCss使用增量方法,則預計第二次運行會比第一次更快。 – JeffryHouser
關於其他答案中的「不要」的一般主題,這取決於你在做什麼。
如果你想:
gulp.task("a",() => {
doSomethingInstant()
return doTaskB()
})
你想:
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)
只是我或者這根本行不通? – Tomasz
第一個不起作用 – StingyJack
第一個建議只是註冊一個吞嚥任務,但沒有回調函數,所以是的,它不會工作。 – joeycozza