跳到主要内容

series()

将任务函数和/或组合操作组合成更大的操作,这些操作将按顺序一个接一个地执行。使用 series()parallel() 的组合操作的嵌套深度没有限制。

使用方法

const { series } = require('gulp');

function javascript(cb) {
// 内容省略
cb();
}

function css(cb) {
// 内容省略
cb();
}

exports.build = series(javascript, css);

签名

series(...tasks)

参数

参数类型说明
tasks
(必填)
function
string
可以作为单独参数传递任意数量的任务函数。如果你之前已注册了任务,可以使用字符串,但不推荐这样做。

返回值

一个组合操作,可以注册为任务或嵌套在其他 series 和/或 parallel 组合中。

当执行组合操作时,所有任务将按顺序运行。如果一个任务中发生错误,则不会运行后续任务。

错误

当没有传递任务时,抛出错误,错误信息为"One or more tasks should be combined using series or parallel"(应使用 series 或 parallel 组合一个或多个任务)。

当传递无效任务或未注册的任务时,抛出错误,错误信息为"Task never defined"(任务从未定义)。

前向引用

前向引用是指使用字符串引用组合尚未注册的任务。这在旧版本中是一种常见做法,但为了实现更快的任务运行时间并推广命名函数的使用,该功能已被移除。

在较新的版本中,如果您尝试使用前向引用,将会收到错误信息"Task never defined"(任务从未定义)。当您尝试使用 exports 进行任务注册通过字符串组合任务时,可能会遇到这种情况。在这种情况下,使用命名函数而不是字符串引用。

在迁移过程中,您可能需要使用 前向引用注册表。这将为每个任务引用添加额外的闭包,并大大减慢构建速度。不要长期依赖这种解决方案

避免重复任务

当运行组合操作时,每次提供的任务都会被执行。

在两个不同组合中引用的 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();
});

exports.build = parallel(css, javascript);

应迁移为这样:

const { series, parallel } = require('gulp');

function clean(cb) {
// 内容省略
cb();
}

function css(cb) {
// 内容省略
cb();
}

function javascript(cb) {
// 内容省略
cb();
}

exports.build = series(clean, parallel(css, javascript));