gulp.watch()

2020-09-30 18:06 更新

gulp.watch()介紹

監(jiān)聽 globs 并在發(fā)生更改時運行任務(wù)。任務(wù)與任務(wù)系統(tǒng)的其余部分被統(tǒng)一處理。

gulp.watch()用法

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

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

gulp.watch()函數(shù)原型

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

參數(shù)

參數(shù)類型描述
globs
(required)
string
array
Globs 用來監(jiān)聽文件系統(tǒng)。
optionsobject詳情參見下文 選項
taskfunction
string
一個 任務(wù)函數(shù) 或由 series() 和 parallel() 生成的組合任務(wù)

返回值

chokidar 的一個實例,用于對監(jiān)聽設(shè)置進(jìn)行細(xì)粒度控制。

可能出現(xiàn)的錯誤

當(dāng)以 globs 形式傳遞非字符串或帶有任何非字符串的數(shù)組時,將拋出一個錯誤,并提示 "Non-string provided as watch path"。

當(dāng)字符串或數(shù)組作為 task 傳遞時,會拋出一個錯誤,提示 "watch task has to be a function (optionally generated by using gulp.parallel or gulp.series)"( watch 任務(wù)必須是一個函數(shù)(可以選擇使用 gulp.parallel 或 gulp.series 生成))。

選項

名稱類型默認(rèn)值描述
ignoreInitialbooleantruefalse,則在實例化過程中調(diào)用該任務(wù),以發(fā)現(xiàn)文件路徑。用于在啟動期間觸發(fā)任務(wù)。
注意: 這個選項被傳遞給 chokidar,但默認(rèn)為 true 而不是 false。
delaynumber200文件更改和任務(wù)執(zhí)行之間的毫秒延遲。允許在執(zhí)行任務(wù)之前等待許多更改,例如查找和替換許多文件。
queuebooleantrue當(dāng)為 true 且任務(wù)已經(jīng)運行時,任何文件更改都將對單個任務(wù)執(zhí)行進(jìn)行排隊。避免長時間運行的任務(wù)重疊。
eventsstring
array
[ 'add',
'change',
'unlink' ]
正在監(jiān)聽的事件,以觸發(fā)任務(wù)執(zhí)行。可以是 'add'、'addDir''change'、'unlink'、'unlinkDir''ready'、和/或 'error'。 另外 'all' 也是可用的,它表示除 'ready' 和 'error' 之外的所有事件。
此選項被直接傳遞給 chokidar.
persistentbooleantrue如果為 false,監(jiān)聽器將不會保持 Node 進(jìn)程的運行。不建議禁用此選項。
此選項被直接傳遞給 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,對符號鏈接和鏈接的文件的更改都將觸發(fā)事件。如果為 false,則只有對符號鏈接的更改才觸發(fā)事件。
此選項被直接傳遞給 chokidar.
cwdstring將與任何相對路徑相結(jié)合以形成絕對路徑的目錄。對于絕對路徑忽略。用于避免將 globs 與 path.join() 組合使用。
此選項被直接傳遞給 chokidar.
disableGlobbingbooleanfalse如果為 true,所有 globs 都被視為字面路徑名稱,即使它們具有特殊字符。
此選項被直接傳遞給 chokidar.
usePollingbooleanfalse當(dāng)為 false 時,監(jiān)聽器將使用 fs.watch()(或 Mac 上的 fsevents)(或fsevents)進(jìn)行監(jiān)聽。如果為 true,則使用 fs.watchFile() 輪詢代替——這是通過網(wǎng)絡(luò)或其他非標(biāo)準(zhǔn)情況成功監(jiān)聽文件所必需的。覆蓋 useFsEvents 默認(rèn)值。
此選項被直接傳遞給 chokidar.
intervalnumber100與 usePolling: true 配套使用。表示文件系統(tǒng)輪詢的間隔。
此選項被直接傳遞給 chokidar.
binaryIntervalnumber300與 usePolling: true 配套使用。表示文件系統(tǒng)輪詢二進(jìn)制文件的間隔。
此選項被直接傳遞給 chokidar.
useFsEventsbooleantrue如果為 true 且 fsevents 可用, 則使用 fsevents 進(jìn)行監(jiān)聽。如果顯式設(shè)置為 true,則替代 usePolling 選項。如果設(shè)置為 false,則自動將 usePolling 設(shè)置為 true。
此選項被直接傳遞給 chokidar.
alwaysStatbooleanfalse如果為 true,總是調(diào)用 fs.stat() 對已更改的文件——將減慢文件監(jiān)聽器。只有在直接使用chokidar 實例時,fs.Stat 的對象才可用。
此選項被直接傳遞給 chokidar.
depthnumber指示將監(jiān)聽多少級嵌套目錄。
此選項被直接傳遞給 chokidar.
awaitWriteFinishbooleanfalse不要使用這個選項,而是使用 delay。
此選項被直接傳遞給 chokidar.
ignorePermissionErrorsbooleanfalse設(shè)置為 true 以監(jiān)聽沒有讀取權(quán)限的文件。然而,如果由于 EPERM 或 EACCES 錯誤導(dǎo)致監(jiān)聽失敗,則會自動跳過。
此選項被直接傳遞給 chokidar.
atomicnumber100只有在 useFsEvents 和 usePolling 為 false 時才激活。自動過濾掉一些編輯器從 "atomic writes" 中產(chǎn)生的工件。如果文件在刪除后的指定毫秒內(nèi)重新添加,則會發(fā)出一個更改事件(而不是取消鏈接然后添加)。
此選項被直接傳遞給 chokidar.

Chokidar 實例

watch() 方法返回 chokidar 的底層實例,提供對監(jiān)聽設(shè)置的細(xì)粒度控制。最常用來注冊提供更改文件的 path 或 stats 的單個事件處理程序。

當(dāng)直接使用 chokidar 實例時,您將無法訪問任務(wù)系統(tǒng)集成,包括異步完成、隊列和延遲

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 函數(shù),當(dāng)指定的事件發(fā)生時調(diào)用該函數(shù)。

參數(shù)類型描述
eventNamestring可以觀察到的事件有 'add'、'addDir'、'change'、'unlink''unlinkDir'、'ready''error'、 或 'all'.
eventHandlerfunction當(dāng)指定的事件發(fā)生時調(diào)用的函數(shù)。參數(shù)詳見下表。
參數(shù)類型描述
pathstring已更改的文件的路徑。如果設(shè)置了 cwd 選項,則是通過刪除 cwd 的相對路徑。
statsobject一個 fs.Stat 對象,但可以是 undefined。如果 alwaysStat 選項被設(shè)置為 true,stats 將始終被提供。

watcher.close()

關(guān)閉文件監(jiān)聽器。一旦關(guān)閉,就不會再發(fā)出任何事件。

watcher.add(globs)

向已經(jīng)運行的監(jiān)聽器實例添加額外的 globs。

參數(shù)類型描述
globsstring
array
額外的要監(jiān)聽的 globs

watcher.unwatch(globs)

刪除正在被監(jiān)聽的 globs,而監(jiān)視程序繼續(xù)使用剩余的路徑。

參數(shù)類型描述
globsstring
array
要刪除的 globs。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號