创建任务#

每个 gulp 任务都是一个异步 JavaScript 函数 - 一个接受错误优先回调或返回流、Promise、事件发射器、子进程或可观察对象(稍后详细介绍)的函数。由于一些平台限制,不支持同步任务,但有一个非常不错的替代方案

导出#

任务可以被认为是公开的私有的

  • 公开任务从 gulpfile 导出,允许通过 gulp 命令运行它们。
  • 私有任务用于内部使用,通常用作 series()parallel() 组合的一部分。

私有任务看起来和行为都像任何其他任务,但最终用户永远无法独立执行它。要公开注册任务,请从 gulpfile 导出它。

const { series } = require('gulp');
// `clean` 函数未导出,因此可以将其视为私有任务。
// 仍可在 `series()` 组合中使用。
function clean(cb) {
// 省略主体
cb();
}
// `build` 函数已导出,因此为公共函数,可以使用 `gulp` 命令运行。
// 也可以在 `series()` 组合中使用。
function build(cb) {
// 省略主体
cb();
}
导出.构建 =构建;
导出.默认 = 串行(清理, 构建);

ALT TEXT MISSING

过去,`task()` 用于将您的函数注册为任务。虽然该 API 仍然可用,但导出应成为主要的注册机制,除非在导出不起作用的极端情况下。

组合任务#

Gulp 提供了两种强大的组合方法,series()parallel(),允许将单个任务组合成更大的操作。这两种方法都接受任意数量的任务函数或组合操作。series()parallel() 可以嵌套在它们自己内部或彼此内部,深度不限。

要按顺序执行任务,请使用 series() 方法。

const { series } = require('gulp');
函数 转换(cb) {
// 省略主体
cb();
}
函数 捆绑(cb) {
// 省略主体
cb();
}
导出.构建 = 串行(转换, 捆绑);

要让任务以最大并发度运行,请将它们与 parallel() 方法结合使用。

const { parallel } = require('gulp');
function javascript(cb) {
// 省略主体
cb();
}
function css(cb) {
// 省略主体
cb();
}
exports.build = parallel(javascript, css);

调用 series()parallel() 时,任务会立即组成。这允许在组成中进行变化,而不是在各个任务中进行条件行为。

const { series } = require('gulp');
函数 minify(cb) {
// 省略主体
cb();
}
函数 转换(cb) {
// 省略主体
cb();
}
函数 livereload(cb) {
// 省略主体
cb();
}
如果 (process.env.NODE_ENV === 'production') {
exports.build = series(transpile, minify);
} 否则 {
导出.构建 = 系列(转译, 实时加载);
}

series()parallel() 可以嵌套到任意深度。

const {系列, 并行 } = require('gulp');
function clean(cb) {
// 省略主体
cb();
}
function cssTranspile(cb) {
// 省略主体
cb();
}
function cssMinify(cb) {
// 省略主体
cb();
}
function jsTranspile(cb) {
// 省略主体
cb();
}
函数 jsBundle(cb) {
// 省略主体
cb();
}
函数 jsMinify(cb) {
// 省略主体
cb();
}
函数 publish(cb) {
// 省略主体
cb();
}
exports.build = series(
clean,
parallel(
cssTranspile,
series(jsTranspile, jsBundle)
),
parallel(cssMinify, jsMinify),
publish
);

当一个组合操作运行时,每次引用一个任务,该任务都将被执行。例如,在两个不同的任务之前引用的clean任务将运行两次,并导致不希望的结果。相反,重构clean任务,使其在最终组合中指定。

如果你有这样的代码

// 这是不正确的
const { series, parallel } = require('gulp');
const clean = function(cb) {
// 省略主体
cb();
};
const css = series(clean, function(cb) {
// 省略主体
cb();
});
const javascript = series(clean, function(cb) {
// 省略主体
cb();
});
导出.构建 = 并行(css, javascript);

迁移至此

const {系列, 并行 } = require('gulp');
function clean(cb) {
// 省略主体
cb();
}
function css(cb) {
// 省略主体
cb();
}
function javascript(cb) {
// 省略主体
cb();
}
导出.构建 = 串行(清理, 并行(css, javascript));