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);

执行命令: