watch()#

允许监视 glob,并在发生更改时运行任务。任务与任务系统的其他部分统一处理。

用法#

const { watch } = require('gulp');
watch(['input/*.js', '!input/something.js'], function(cb) {
// body omitted
cb();
});

签名#

watch(globs, [options], [task])

参数#

参数类型说明
globs
(必需)
字符串
数组
Globs 在文件系统上监视。
options对象在下面的选项中详细说明。
task函数
字符串
series()parallel() 生成的 任务函数 或复合任务。

返回#

一个 chokidar 实例,用于精细控制监视设置。

错误#

当将非字符串或包含任何非字符串的数组作为 globs 传递时,抛出错误,消息为“提供非字符串作为监视路径”。

当将字符串或数组作为 task 传递时,抛出错误,消息为“监视任务必须是一个函数(可选地通过使用 gulp.parallel 或 gulp.series 生成)”。

选项#

名称类型默认值说明
ignoreInitial布尔值true如果为 false,则在实例化期间调用任务,因为发现了文件路径。用于在启动期间触发任务。
注意:此选项传递给 chokidar,但默认为 true,而不是 false
delay数字200文件更改和任务执行之间的毫秒延迟。允许在执行任务之前等待许多更改,例如,对许多文件进行查找和替换。
queue布尔值true当为 true 且任务已在运行时,任何文件更改都将排队执行单个任务。防止长时间运行的任务重叠。
events字符串
数组
[ 'add',
'change',
'unlink' ]
正在监视以触发任务执行的事件。可以是 'add''addDir''change''unlink''unlinkDir''ready' 和/或 'error'。此外,还提供了 'all',它表示除 'ready''error' 之外的所有事件。
此选项直接传递给 chokidar
persistent布尔值true如果为 false,则监视器不会保持 Node 进程运行。不建议禁用此选项。
此选项直接传递给 chokidar
ignored数组
字符串
RegExp
函数
定义要忽略的 glob。如果提供了函数,则它将针对每个路径调用两次 - 一次仅使用路径,然后使用该文件的路径和 fs.Stats 对象。
此选项直接传递给 chokidar
followSymlinks布尔值true当为 true 时,对符号链接和链接文件的更改都会触发事件。如果为 false,则只有对符号链接的更改才会触发事件。
此选项直接传递给 chokidar
cwd字符串将与任何相对路径结合以形成绝对路径的目录。对于绝对路径,它将被忽略。用于避免将 globspath.join() 结合使用。
此选项直接传递给 chokidar
disableGlobbing布尔值false如果为 true,则所有 globs 都将被视为文字路径名,即使它们具有特殊字符。
此选项直接传递给 chokidar
usePolling布尔值false为 false 时,监视器将使用 fs.watch()(或 Mac 上的 fsevents)进行监视。如果为 true,则改用 fs.watchFile() 轮询 - 这是在网络或其他非标准情况下成功监视文件所必需的。覆盖 useFsEvents 默认值。
此选项直接传递给 chokidar
interval数字100usePolling: true 结合使用。文件系统轮询间隔。
此选项直接传递给 chokidar
binaryInterval数字300usePolling: true 结合使用。二进制文件的文件系统轮询间隔。
此选项直接传递给 chokidar
useFsEvents布尔值true为 true 时,如果可用,则使用 fsevents 进行监视。如果明确设置为 true,则取代 usePolling 选项。如果设置为 false,则自动将 usePolling 设置为 true。
此选项直接传递给 chokidar
alwaysStat布尔值false如果为 true,则始终对已更改的文件调用 fs.stat() - 将减慢文件监视器。仅当直接使用 chokidar 实例时,fs.Stat 对象才可用。
此选项直接传递给 chokidar
depth数字指示将监视多少层嵌套目录。
此选项直接传递给 chokidar
awaitWriteFinish布尔值false不要使用此选项,改用 delay
此选项直接传递给 chokidar
ignorePermissionErrors布尔值false设置为 true 以监视没有读取权限的文件。然后,如果由于 EPERM 或 EACCES 错误导致监视失败,则将静默跳过这些错误。
此选项直接传递给 chokidar
atomic数字100仅在 useFsEventsusePolling 为 false 时才处于活动状态。自动过滤掉一些编辑器中“原子写入”产生的工件。如果在删除后的指定毫秒内重新添加文件,则将发出更改事件 - 而不是取消链接然后添加。
此选项直接传递给 chokidar

Chokidar 实例#

watch() 方法返回 chokidar 的底层实例,从而可以精细地控制监视设置。最常用的方法是注册提供已更改文件的 pathstats 的单个事件处理程序。

直接使用 chokidar 实例时,你将无法访问任务系统集成,包括异步完成、排队和延迟。

const { watch } = require('gulp');
const watcher = watch(['input/*.js']);
watcher.on('change', function(path, stats) {
console.log(`文件 ${path}已更改`);
});
watcher.on('add', function(path, stats) {
console.log(`文件 ${path} 已添加`);
});
watcher.on('unlink', function(path, stats) {
console.log(`文件 ${path} 已移除`);
});
watcher.close();

watcher.on(eventName, eventHandler)

注册 eventHandler 函数,以便在指定事件发生时调用。

参数类型说明
eventName字符串可以监视的事件为 'add''addDir''change''unlink''unlinkDir''ready''error''all'
eventHandler函数在指定事件发生时调用的函数。下表中详细说明了参数。
参数类型说明
path字符串已更改文件的路径。如果设置了 cwd 选项,则通过删除 cwd 使路径变为相对路径。
stats对象一个 fs.Stat 对象,但可能是 undefined。如果 alwaysStat 选项设置为 true,则始终会提供 stats

watcher.close()

关闭文件监视器。关闭后,将不再发出任何事件。

watcher.add(globs)

向已运行的监视器实例添加其他 glob。

参数类型说明
globs字符串
数组
要监视的其他 glob。

watcher.unwatch(globs)

移除正在监视的 glob,同时监视器继续监视剩余路径。

参数类型说明
globs字符串
数组
要移除的 glob。