codecamp

gulp.watch()

gulp.watch()介绍

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

gulp.watch()用法

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

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

gulp.watch()函数原型

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

参数

参数类型描述
globs
(required)
string
array
Globs 用来监听文件系统。
optionsobject详情参见下文 选项
taskfunction
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 生成))。

选项

名称类型默认值描述
ignoreInitialbooleantruefalse,则在实例化过程中调用该任务,以发现文件路径。用于在启动期间触发任务。
注意: 这个选项被传递给 chokidar,但默认为 true 而不是 false
delaynumber200文件更改和任务执行之间的毫秒延迟。允许在执行任务之前等待许多更改,例如查找和替换许多文件。
queuebooleantrue当为 true 且任务已经运行时,任何文件更改都将对单个任务执行进行排队。避免长时间运行的任务重叠。
eventsstring
array
[ 'add',
'change',
'unlink' ]
正在监听的事件,以触发任务执行。可以是 'add''addDir''change''unlink''unlinkDir''ready'、和/或 'error'。 另外 'all' 也是可用的,它表示除 'ready' 和 'error' 之外的所有事件。
此选项被直接传递给 chokidar.
persistentbooleantrue如果为 false,监听器将不会保持 Node 进程的运行。不建议禁用此选项。
此选项被直接传递给 chokidar.
ignoredarray
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.
followSymlinksbooleantrue如果为 true,对符号链接和链接的文件的更改都将触发事件。如果为 false,则只有对符号链接的更改才触发事件。
此选项被直接传递给 chokidar.
cwdstring将与任何相对路径相结合以形成绝对路径的目录。对于绝对路径忽略。用于避免将 globs 与 path.join() 组合使用。
此选项被直接传递给 chokidar.
disableGlobbingbooleanfalse如果为 true,所有 globs 都被视为字面路径名称,即使它们具有特殊字符。
此选项被直接传递给 chokidar.
usePollingbooleanfalse当为 false 时,监听器将使用 fs.watch()(或 Mac 上的 fsevents)(或fsevents)进行监听。如果为 true,则使用 fs.watchFile() 轮询代替——这是通过网络或其他非标准情况成功监听文件所必需的。覆盖 useFsEvents 默认值。
此选项被直接传递给 chokidar.
intervalnumber100与 usePolling: true 配套使用。表示文件系统轮询的间隔。
此选项被直接传递给 chokidar.
binaryIntervalnumber300与 usePolling: true 配套使用。表示文件系统轮询二进制文件的间隔。
此选项被直接传递给 chokidar.
useFsEventsbooleantrue如果为 true 且 fsevents 可用, 则使用 fsevents 进行监听。如果显式设置为 true,则替代 usePolling 选项。如果设置为 false,则自动将 usePolling 设置为 true。
此选项被直接传递给 chokidar.
alwaysStatbooleanfalse如果为 true,总是调用 fs.stat() 对已更改的文件——将减慢文件监听器。只有在直接使用chokidar 实例时,fs.Stat 的对象才可用。
此选项被直接传递给 chokidar.
depthnumber指示将监听多少级嵌套目录。
此选项被直接传递给 chokidar.
awaitWriteFinishbooleanfalse不要使用这个选项,而是使用 delay
此选项被直接传递给 chokidar.
ignorePermissionErrorsbooleanfalse设置为 true 以监听没有读取权限的文件。然而,如果由于 EPERM 或 EACCES 错误导致监听失败,则会自动跳过。
此选项被直接传递给 chokidar.
atomicnumber100只有在 useFsEvents 和 usePolling 为 false 时才激活。自动过滤掉一些编辑器从 "atomic writes" 中产生的工件。如果文件在删除后的指定毫秒内重新添加,则会发出一个更改事件(而不是取消链接然后添加)。
此选项被直接传递给 chokidar.

Chokidar 实例

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

当直接使用 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)

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

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

watcher.close()

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

watcher.add(globs)

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

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

watcher.unwatch(globs)

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

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


gulp.parallel()
gulp.task()
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }