99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

gulp文件監(jiān)控

2020-09-30 18:03 更新

gulp文件監(jiān)控

gulp api 中的 watch() 方法利用文件系統(tǒng)的監(jiān)控程序(file system watcher)將 globs 與 任務(task) 進行關聯(lián)。它對匹配 glob 的文件進行監(jiān)控,如果有文件被修改了就執(zhí)行關聯(lián)的任務(task)。如果被執(zhí)行的任務(task)沒有觸發(fā) 異步完成 信號,它將永遠不會再次運行了。

此 API 的默認設置是基于通常的使用場景的,而且提供了內(nèi)置的延遲和排隊機制。

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

function clean(cb) {
  // body omitted
  cb();
}

function javascript(cb) {
  // body omitted
  cb();
}

function css(cb) {
  // body omitted
  cb();
}

// 可以只關聯(lián)一個任務
watch('src/*.css', css);
// 或者關聯(lián)一個任務組合
watch('src/*.js', series(clean, javascript));

警告:避免同步任務

就像注冊到任務系統(tǒng)中的任務(task)一樣,與文件監(jiān)控程序關聯(lián)的任務(task)不能是同步任務(synchronous taks)。如果你將同步任務(task)關聯(lián)到監(jiān)控程序,則無法確定任務(task)的完成情況,任務(task)將不會再次運行(假定當前正在運行)。

由于文件監(jiān)控程序會讓你的 Node 進程保持持續(xù)運行,因此不會有錯誤或警告產(chǎn)生。由于進程沒有退出,因此無法確定任務(task)是否已經(jīng)完成還是運行了很久很久了。

可監(jiān)控的事件

默認情況下,只要創(chuàng)建、更改或刪除文件,文件監(jiān)控程序就會執(zhí)行關聯(lián)的任務(task)。 如果你需要使用不同的事件,你可以在調(diào)用 watch() 方法時通過 events 參數(shù)進行指定。可用的事件有 'add'、'addDir'、'change'、'unlink'、'unlinkDir'、'ready'、'error'。此外,還有一個 'all' 事件,它表示除 'ready' 和 'error' 之外的所有事件。

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

// 所有事件都將被監(jiān)控
watch('src/*.js', { events: 'all' }, function(cb) {
  // body omitted
  cb();
});

初次執(zhí)行

調(diào)用 watch() 之后,關聯(lián)的任務(task)是不會被立即執(zhí)行的,而是要等到第一次文件修之后才執(zhí)行。

如需在第一次文件修改之前執(zhí)行,也就是調(diào)用 watch() 之后立即執(zhí)行,請將 ignoreInitial 參數(shù)設置為 false。

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

// 關聯(lián)的任務(task)將在啟動時執(zhí)行
watch('src/*.js', { ignoreInitial: false }, function(cb) {
  // body omitted
  cb();
});

隊列

watch() 方法能夠保證當前執(zhí)行的任務(task)不會再次并發(fā)執(zhí)行。當文件監(jiān)控程序關聯(lián)的任務(task)正在運行時又有文件被修改了,那么所關聯(lián)任務的這次新的執(zhí)行將被放到執(zhí)行隊列中等待,直到上一次關聯(lián)任務執(zhí)行完之后才能運行。每一次文件修改只產(chǎn)生一次關聯(lián)任務的執(zhí)行并放入隊列中。

如需禁止隊列,請將 queue 參數(shù)設置為 false。

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

// 每次文件修改之后關聯(lián)任務都將執(zhí)行(有可能并發(fā)執(zhí)行)
watch('src/*.js', { queue: false }, function(cb) {
  // body omitted
  cb();
});

延遲

文件更改之后,只有經(jīng)過 200 毫秒的延遲之后,文件監(jiān)控程序所關聯(lián)的任務(task)才會被執(zhí)行。這是為了避免在同使更改許多文件時(例如查找和替換操作)過早啟動任務(taks)的執(zhí)行。

如需調(diào)整延遲時間,請為 delay 參數(shù)設置一個正整數(shù)。

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

// 文件第一次修改之后要等待 500 毫秒才執(zhí)行關聯(lián)的任務
watch('src/*.js', { delay: 500 }, function(cb) {
  // body omitted
  cb();
});

使用監(jiān)控程序實例

你可能不會使用到此功能,但是如果你需要對被修改的文件進行完全的掌控 (例如訪問文件路徑或元數(shù)據(jù))請使用從 watch() 返回的 chokidar 實例。

注意: 返回的 chokidar 實例沒有隊列、延遲和異步完成(async completion)這些功能。

可選的依賴項

Gulp 有一個名為 fsevents 的可選依賴項,他是一個特定于 Mac 系統(tǒng)的文件監(jiān)控程序。如果你看到安裝 fsevents 時出現(xiàn)的警告信息 - "npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents" - 這并不是什么問題,忽略即可。 如果跳過 fsevents 的安裝,將使用一個備用文件監(jiān)控程序,后續(xù)在 gulpfile 中產(chǎn)生的任何錯誤都將與此警告無關。


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號