共计 1821 个字符,预计需要花费 5 分钟才能阅读完成。
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
);
执行命令: