Gulp watch()

🌙
手机阅读
本文目录结构

watch()

监听 globs 并在发生更改时运行任务。任务与任务系统的其余部分被统一处理。

用法

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

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

函数原型

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

参数

参数 类型 描述
globs
(required)
string
array
Globs 用来监听文件系统。
options object 详情参见下文 选项
task function
string
一个 任务函数 或由 series()parallel() 生成的组合任务

返回值

chokidar 的一个实例,用于对监听设置进行细粒度控制。

可能出现的错误

当以 globs 形式传递非字符串或带有任何非字符串的数组时,将抛出一个错误,并提示 “Non-string provided as watch path”。

当字符串或数组作为 task 传递时,会抛出一个错误,提示 “watch task has to be a function (optionally generated by using gulp.parallel or gulp.series)"( watch 任务必须是一个函数(可以选择使用 gulp.parallel 或 gulp.series 生成))。

选项

名称 类型 默认值 描述
ignoreInitial boolean true false,则在实例化过程中调用该任务,以发现文件路径。用于在启动期间触发任务。
注意: 这个选项被传递给 chokidar,但默认为 true 而不是 false
delay number 200 文件更改和任务执行之间的毫秒延迟。允许在执行任务之前等待许多更改,例如查找和替换许多文件。
queue boolean true 当为 true 且任务已经运行时,任何文件更改都将对单个任务执行进行排队。避免长时间运行的任务重叠。
events string
array
[ ‘add’,‘change’,‘unlink’ ] 正在监听的事件,以触发任务执行。可以是 'add''addDir''change''unlink''unlinkDir', 'ready'、和 / 或 'error'
另外 'all' 也是可用的,它表示除 'ready''error' 之外的所有事件。
此选项被直接传递给 chokidar.
persistent boolean true 如果为 false,监听器将不会保持 Node 进程的运行。不建议禁用此选项。
此选项被直接传递给 chokidar.
ignored array
string
RegExp
function
Defines globs to be ignored. If a function is provided, it will be called twice per path - once with just the path, then with the path and the fs.Stats object of that file.
此选项被直接传递给 chokidar.
followSymlinks boolean true 如果为 true,对符号链接和链接的文件的更改都将触发事件。如果为 false,则只有对符号链接的更改才触发事件。
此选项被直接传递给 chokidar.
cwd string 将与任何相对路径相结合以形成绝对路径的目录。对于绝对路径忽略。用于避免将 globspath.join() 组合使用。
此选项被直接传递给 chokidar.
disableGlobbing boolean false 如果为 true,所有 globs 都被视为字面路径名称,即使它们具有特殊字符。
此选项被直接传递给 chokidar.
usePolling boolean false 当为 false 时,监听器将使用 fs.watch()(或 Mac 上的 fsevents)(或fsevents)进行监听。如果为 true,则使用 fs.watchFile() 轮询代替——这是通过网络或其他非标准情况成功监听文件所必需的。覆盖 useFsEvents 默认值。
此选项被直接传递给 chokidar.
interval number 100 usePolling: true 配套使用。表示文件系统轮询的间隔。
此选项被直接传递给 chokidar.
binaryInterval number 300 usePolling: true 配套使用。表示文件系统轮询二进制文件的间隔。
此选项被直接传递给 chokidar.
useFsEvents boolean true 如果为 true 且 fsevents 可用, 则使用 fsevents 进行监听。如果显式设置为 true,则替代 usePolling 选项。如果设置为 false,则自动将 usePolling 设置为 true。
此选项被直接传递给 chokidar.
alwaysStat boolean false 如果为 true,总是调用 fs.stat() 对已更改的文件——将减慢文件监听器。只有在直接使用 chokidar 实例时,fs.Stat 的对象才可用。
此选项被直接传递给 chokidar.
depth number 指示将监听多少级嵌套目录。
此选项被直接传递给 chokidar.
awaitWriteFinish boolean false 不要使用这个选项,而是使用 delay
此选项被直接传递给 chokidar.
ignorePermissionErrors boolean false 设置为 true 以监听没有读取权限的文件。然而,如果由于 EPERM 或 EACCES 错误导致监听失败,则会自动跳过。
此选项被直接传递给 chokidar.
atomic number 100 只有在 useFsEventsusePolling 为 false 时才激活。自动过滤掉一些编辑器从 “atomic writes” 中产生的工件。如果文件在删除后的指定毫秒内重新添加,则会发出一个更改事件(而不是取消链接然后添加)。
此选项被直接传递给 chokidar.

Chokidar 实例

watch() 方法返回 chokidar 的底层实例,提供对监听设置的细粒度控制。最常用来注册提供更改文件的 pathstats 的单个事件处理程序。

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

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

const watcher = watch(['input/*.js']);

watcher.on('change', function(path, stats) {
  console.log(`File ${path} was changed`);
});

watcher.on('add', function(path, stats) {
  console.log(`File ${path} was added`);
});

watcher.on('unlink', function(path, stats) {
  console.log(`File ${path} was removed`);
});

watcher.close();

watcher.on(eventName, eventHandler)

watcher.on(eventName, eventHandler)

注册 eventHandler 函数,当指定的事件发生时调用该函数。

参数 类型 描述
eventName string 可以观察到的事件有 'add''addDir''change''unlink''unlinkDir''ready''error'、 或 'all'.
eventHandler function 当指定的事件发生时调用的函数。参数详见下表。
参数 类型 描述
path string 已更改的文件的路径。如果设置了 cwd 选项,则是通过删除 cwd 的相对路径。
stats object 一个 fs.Stat 对象,但可以是 undefined。如果 alwaysStat 选项被设置为 truestats 将始终被提供。

watcher.close()

watcher.close()

关闭文件监听器。一旦关闭,就不会再发出任何事件。

watcher.add(globs)

watcher.add(globs)

向已经运行的监听器实例添加额外的 globs。

参数 类型 描述
globs string
array 额外的要监听的 globs

watcher.unwatch(globs)

watcher.unwatch(globs)

删除正在被监听的 globs,而监视程序继续使用剩余的路径。

参数 类型 描述
globs string
array 要删除的 globs。

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了