Gulp 導出任務

Gulp 中的任務可以是可以分爲 public(公有)和 private (私有)類型。

  • 公有任務:從 gulpfile 中被導出的任務稱爲公有任務,可以通過 gulp 命令直接調用。
  • 私有任務:在內部使用,通常作爲 series()parallel() 組合的組成部分。

一個私有類型的任務在外觀和行爲上和其他任務是一樣的,但是不能夠被用戶直接調用。如果需要將一個任務註冊爲公有類型的,只需要從 gulpfile.js 文件中將任務通過 export 導出即可。

如何導出任務

我們可以在 gulpfile.js 文件中,使用 export 命令導出任務,這樣這個被導出的任務變爲了一個公有任務(public task),可以被 gulp 命令直接調用。

示例:

看下面這個例子:

const { series } = require('gulp');

// clean函數並未被導出,因此clean是私有任務,可以被用在 series() 組合中
function clean(cb) {
  cb();
}

// build 函數被導出了,因此它是一個公有任務,可以被 gulp 命令直接調用,它也可用在series()組合中
function build(cb) {
  cb();
}

// 導出 build 函數
exports.build = build;
exports.default = series(clean, build);

執行 gulp --tasks 命令: 在以前的 gulp 版本中,task() 方法用來將函數註冊爲任務。雖然這個 API 依舊是可以使用的,但是導出將會是主要的註冊機制,除非遇到 export 不起作用的情況。

組合任務

Gulp 提供了兩個強大的組合方法: series()parallel() 方法,這兩個方法允許將多個獨立的任務組合爲一個更大的操作。這兩個方法都可以接受任意數目的任務(task)函數或已經組合的操作。series()parallel() 方法可以互相嵌套至任意深度。

如果需要讓任務按順序執行,可以使用 series() 方法。

示例:
const { series } = require('gulp');

function one(cb) {
  console.log("one")
  cb();
}

function two(cb) {
  console.log("two")
  cb();
}

exports.build = series(one, two);

執行 gulp build 命令: 可以看到圖片中,按照任務的執行完畢的先後順序爲 one > two > build

如果希望以最大併發來運行的任務,可以使用 parallel() 方法將它們組合起來:

const { parallel } = require('gulp');

function one(cb) {
  console.log("one")
  cb();
}

function two(cb) {
  console.log("two")
  cb();
}

exports.build = parallel(one, two);

series()parallel() 被調用時,任務被立即組合在一起。這就允許在組合中進行改變,而不需要在單個任務中進行條件判斷。

示例:
const { series } = require('gulp');

function one(cb) {
  cb();
}
function two(cb) {
  cb();
}
function three(cb) {
  cb();
}
if (process.env.NODE_ENV === 'production') {
  exports.build = series(two, one);
} else {
  exports.build = series(two, three);
}

上述代碼中表示如果在生產環境下執行,則運行 exports.build = series(two, one),否則運行 exports.build = series(two, three),我們看一下執行結果: series()parallel() 可以被嵌套到任意深度:

const { series, parallel } = require('gulp');

function one(cb) {
  cb();
}
function two(cb) {
  cb();
}
function three(cb) {
  cb();
}
function four(cb) {
  cb();
}
function five(cb) {
  cb();
}

exports.build = series(
  one,
  parallel(
    two,
    series(three, four)
  ),
  five
);

執行命令:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章