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);
执行命令: