最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

node.js 如何監(jiān)視文件變化

 更新時(shí)間:2020年09月01日 12:01:14   作者:謙行  
這篇文章主要介紹了node.js 如何監(jiān)視文件變化,幫助大家更好的理解和學(xué)習(xí)node.js,感興趣的朋友可以了解下

fs.FSWatcher

fs.FSWatcher類 繼承了 EventEmitter,用于監(jiān)視文件變化,調(diào)用 fs.watch 后返回一個(gè) fs.FSWatcher 實(shí)例,每當(dāng)指定監(jiān)視的文件被修改時(shí),實(shí)例會(huì)觸發(fā)事件調(diào)用回調(diào)函數(shù)

fs.watch('./tmp', (eventType, filename) => {
 if (filename) {
  console.log(filename);
 }
});

fs.watch()

fs.watch(filename[, options][, listener]) 監(jiān)視文件變化,返回 fs.FSWatcher 實(shí)例

1.filename:文件或文件夾路徑

2.options

  • encoding
  • recursive:默認(rèn)值 false,應(yīng)該監(jiān)視所有子目錄,還是僅監(jiān)視當(dāng)前目錄,僅在 macOS 和 Windows 上支持
  • persistent:默認(rèn)值 true,指示如果文件已正被監(jiān)視,進(jìn)程是否應(yīng)繼續(xù)運(yùn)行
  • listener(eventType, filename):文件變化回調(diào)函數(shù)

eventType 主要是 renamechange ,在大多數(shù)平臺(tái)上,文件在目錄中出現(xiàn)或消失時(shí)觸發(fā) 'rename' 事件,在 Windows 上,如果監(jiān)視的目錄被移動(dòng)或重命名,則不會(huì)觸發(fā)任何事件,當(dāng)監(jiān)視的目錄被刪除時(shí),則報(bào)告 EPERM 錯(cuò)誤

fs.watch('./', { recursive: true }, (eventType, filename) => {
 console.log(eventType, filename);
});

fs.watchFile()

fs.watchFile(filename[, options], listener) 用于監(jiān)視文件變化

1.filename

2.options

  • biginit:默認(rèn)值 false,指定回調(diào) stat 中的數(shù)值是否為 biginit 類型
  • persistent:默認(rèn)值 true,當(dāng)文件正在被監(jiān)視時(shí),進(jìn)程是否應(yīng)該繼續(xù)運(yùn)行
  • interval:默認(rèn)值 5007,用來(lái)指定輪詢頻率(ms)

3.listener(currentStats, previousStats):listener 有兩個(gè)參數(shù),當(dāng)前的 stat 對(duì)象和之前的 stat 對(duì)象
要在修改文件時(shí)收到通知,則需要比較 curr.mtime prev.mtime

const fs = require('fs');

fs.watchFile('./test.txt', { interval: 100 }, (curr, prev) => {
 console.log('當(dāng)前的最近修改時(shí)間是: ' + curr.mtime);
 console.log('之前的最近修改時(shí)間是: ' + prev.mtime);
});

const tid = setInterval(() => {
 fs.appendFile('./test.txt', 'Hello, world!\n', err => {
  if (err) throw err;
  console.log('文件修改完成');
 });
}, 300);

setTimeout(() => {
 clearInterval(tid);
 fs.unwatchFile('./test.txt');
}, 2000);

fs.watch() 與 fs.watchFile()

因?yàn)?fs.watchFile() 使用輪訓(xùn)方式檢測(cè)文件變化,如果不設(shè)置 interval 或者設(shè)置較高的值會(huì)發(fā)現(xiàn)文件變化的監(jiān)視有延遲
而 fs.watch() 監(jiān)聽(tīng)操作系統(tǒng)提供的事件,而且可以監(jiān)視目錄變化,使用 fs.watch() 比 fs.watchFile() 更高效,平常應(yīng)盡可能使用 fs.watch() 代替 fs.watchFile()

當(dāng)然 fs.watch() 依賴操作系統(tǒng)的實(shí)現(xiàn),在不同平臺(tái)上表現(xiàn)會(huì)有差異

  • Linux 操作系統(tǒng)使用 inotify
  • 在 macOS 系統(tǒng)使用 FSEvents
  • 在 windows 系統(tǒng)使用 ReadDirectoryChangesW

fs.unwatchFile

fs.unwatchFile(filename[, listener]) 停止監(jiān)視 filename 的變化,如果指定了 listener,則僅移除此特定監(jiān)聽(tīng)器,否則將移除所有監(jiān)聽(tīng)器,從而停止監(jiān)視 filename

fs.unwatchFile('./test.txt');

社區(qū)選擇

fs.watchFile() 性能問(wèn)題,fs.watch() 平臺(tái)不一致等兩個(gè)方法都有不盡如人意的地方

Node.js fs.watch:

MacOS 有時(shí)候不提供 filename
在部分場(chǎng)景不觸發(fā)修改事件(MacOS Sublime)
經(jīng)常一次修改兩次觸發(fā)事件
大部分文件變化 eventType 都是 rename.
未提供簡(jiǎn)單的監(jiān)視文件樹(shù)方式

Node.js fs.watchFile:

事件處理問(wèn)題和 fs.watch 一樣爛
沒(méi)有嵌套監(jiān)聽(tīng)
CPU 消耗大

https://www.npmjs.com/package/chokidar

日常在監(jiān)視文件變化可以選擇社區(qū)的優(yōu)秀方案

  1. node-watch
  2. chokidar
const chokidar = require('chokidar');
 
// One-liner for current directory
chokidar.watch('.').on('all', (event, path) => {
 console.log(event, path);
});
// Initialize watcher.
const watcher = chokidar.watch('file, dir, glob, or array', {
 ignored: /(^|[\/\\])\../, // ignore dotfiles
 persistent: true
});
 
// Something to use when events are received.
const log = console.log.bind(console);
// Add event listeners.
watcher
 .on('add', path => log(`File ${path} has been added`))
 .on('change', path => log(`File ${path} has been changed`))
 .on('unlink', path => log(`File ${path} has been removed`));
 
// More possible events.
watcher
 .on('addDir', path => log(`Directory ${path} has been added`))
 .on('unlinkDir', path => log(`Directory ${path} has been removed`))
 .on('error', error => log(`Watcher error: ${error}`))
 .on('ready', () => log('Initial scan complete. Ready for changes'))
 .on('raw', (event, path, details) => { // internal
  log('Raw event info:', event, path, details);
 });

以上就是node.js 如何監(jiān)視文件變化的詳細(xì)內(nèi)容,更多關(guān)于node.js 監(jiān)視文件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Node.js調(diào)用fs.renameSync報(bào)錯(cuò)(Error: EXDEV, cross-device link not permitted)

    Node.js調(diào)用fs.renameSync報(bào)錯(cuò)(Error: EXDEV, cross-device link not

    這篇文章主要介紹了Node.js調(diào)用fs.renameSync報(bào)錯(cuò)(Error: EXDEV, cross-device link not permitted),非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-12-12
  • npm?install安裝過(guò)程報(bào)錯(cuò)的實(shí)用解決辦法

    npm?install安裝過(guò)程報(bào)錯(cuò)的實(shí)用解決辦法

    最近做項(xiàng)目遇到npm install 的問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于npm?install安裝過(guò)程報(bào)錯(cuò)的實(shí)用解決辦法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • Node.js使用supervisor進(jìn)行開(kāi)發(fā)中調(diào)試的方法

    Node.js使用supervisor進(jìn)行開(kāi)發(fā)中調(diào)試的方法

    今天小編就為大家分享一篇關(guān)于Node.js使用supervisor進(jìn)行開(kāi)發(fā)中調(diào)試的方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • Node.js連接mongodb實(shí)例代碼

    Node.js連接mongodb實(shí)例代碼

    這篇文章主要介紹了Node.js連接mongodb實(shí)例代碼,這里整理了詳細(xì)的代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • node命令以及切換node版本詳細(xì)步驟

    node命令以及切換node版本詳細(xì)步驟

    這篇文章主要給大家介紹了關(guān)于node命令以及切換node版本的相關(guān)資料,在使用node命令切換node版本時(shí)可以使用nvm(Node?Version?Manager)工具來(lái)管理不同版本的node,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • nodejs微信開(kāi)發(fā)之授權(quán)登錄+獲取用戶信息

    nodejs微信開(kāi)發(fā)之授權(quán)登錄+獲取用戶信息

    這篇文章主要介紹了nodejs微信開(kāi)發(fā)之授權(quán)登錄+獲取用戶信息,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-03-03
  • nodejs的安裝使用與npm的介紹

    nodejs的安裝使用與npm的介紹

    Node.js是一個(gè)Javascript運(yùn)行環(huán)境(runtime environment),發(fā)布于2009年5月,由Ryan Dahl開(kāi)發(fā),實(shí)質(zhì)是對(duì)Chrome V8引擎進(jìn)行了封裝。本文詳細(xì)介紹了Node.js的安裝和使用,需要的朋友可以參考下
    2019-09-09
  • 解決使用node命令提示:'node'不是內(nèi)部或外部命令,也不是可運(yùn)行的程序

    解決使用node命令提示:'node'不是內(nèi)部或外部命令,也不是可運(yùn)行的程序

    最近在工作中遇到了個(gè)常見(jiàn)的問(wèn)題,分享給大家,這篇文章主要給大家介紹了關(guān)于如何解決使用node命令提示:'node'不是內(nèi)部或外部命令,也不是可運(yùn)行的程序的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • nodejs nedb 封裝庫(kù)與使用方法示例

    nodejs nedb 封裝庫(kù)與使用方法示例

    這篇文章主要介紹了nodejs nedb 封裝庫(kù)與使用方法,結(jié)合實(shí)例形式分析了nodejs nedb.js封裝庫(kù)的定義與使用技巧,需要的朋友可以參考下
    2020-02-02
  • 如何使用Node.js遍歷文件夾詳解

    如何使用Node.js遍歷文件夾詳解

    目錄遍歷挺常見(jiàn),操作一個(gè)文件夾里的所有文件,替換或者添加刪除某些東西是非常普遍的操作,這篇文章主要給大家介紹了關(guān)于如何使用Node.js遍歷文件夾的相關(guān)資料,需要的朋友可以參考下
    2022-03-03

最新評(píng)論

日土县| 海丰县| 遂平县| 临颍县| 城口县| 石泉县| 仪陇县| 惠东县| 盐山县| 临潭县| 军事| 嘉荫县| 迁安市| 清原| 湖南省| 洮南市| 水城县| 保定市| 老河口市| 金寨县| 邳州市| 淮阳县| 保山市| 定西市| 从江县| 盘锦市| 连云港市| 康定县| 丰原市| 长垣县| 广汉市| 定日县| 大兴区| 静安区| 文水县| 二连浩特市| 平乡县| 大宁县| 理塘县| 周宁县| 军事|