乐趣区

关于gulp: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
);

执行命令:

退出移动版