欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

fs.FSWatcher

fs.FSWatcher類 繼承了 EventEmitter,用于監(jiān)視文件變化,調(diào)用 fs.watch 后返回一個 fs.FSWatcher 實例,每當指定監(jiān)視的文件被修改時,實例會觸發(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 實例

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

2.options

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

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

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

fs.watchFile()

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

1.filename

2.options

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

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

const fs = require('fs');

fs.watchFile('./test.txt', { interval: 100 }, (curr, prev) => {
 console.log('當前的最近修改時間是: ' + curr.mtime);
 console.log('之前的最近修改時間是: ' + 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()

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

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

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

fs.unwatchFile

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

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

社區(qū)選擇

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

Node.js fs.watch:

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

Node.js fs.watchFile:

事件處理問題和 fs.watch 一樣爛
沒有嵌套監(jiān)聽
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)視文件變化的詳細內(nèi)容,更多關于node.js 監(jiān)視文件的資料請關注腳本之家其它相關文章!

相關文章

  • 從零學習node.js之簡易的網(wǎng)絡爬蟲(四)

    從零學習node.js之簡易的網(wǎng)絡爬蟲(四)

    簡單的爬蟲實現(xiàn)原理很簡單:發(fā)送http請求至目標地址獲取HTML頁面數(shù)據(jù),然后從獲取來的頁面數(shù)據(jù)中提取需要的數(shù)據(jù)保存。下面這篇文章主要介紹了利用node.js實現(xiàn)簡易的網(wǎng)絡爬蟲的相關資料,需要的朋友可以參考下。
    2017-02-02
  • nodejs遍歷文件夾下并操作HTML/CSS/JS/PNG/JPG的方法

    nodejs遍歷文件夾下并操作HTML/CSS/JS/PNG/JPG的方法

    這篇文章主要介紹了nodejs遍歷文件夾下并操作HTML/CSS/JS/PNG/JPG的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • npm的安裝與使用

    npm的安裝與使用

    這篇文章介紹了npm的安裝與使用,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • Node.js的進程管理的深入理解

    Node.js的進程管理的深入理解

    這篇文章主要介紹了Node.js的進程管理的深入理解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • Node.js中path.join()優(yōu)勢例舉分析

    Node.js中path.join()優(yōu)勢例舉分析

    在本篇文章里小編給大家整理的是一篇關于Node.js中path.join()優(yōu)勢例舉分析,有興趣的朋友們可以學習下。
    2021-08-08
  • Node.js中的事件驅(qū)動編程詳解

    Node.js中的事件驅(qū)動編程詳解

    這篇文章主要介紹了Node.js中的事件驅(qū)動編程詳解,本文主要講解理論性知識,如什么是事件驅(qū)動編程、什么是閉包、閉包如何幫助異步編程等知識,需要的朋友可以參考下
    2014-08-08
  • 在Node.js中實現(xiàn)獲取用戶頻道信息的功能

    在Node.js中實現(xiàn)獲取用戶頻道信息的功能

    在構(gòu)建社交或視頻分享平臺時,允許用戶查看其他用戶的頻道信息是一個基本需求,本文將介紹如何在Node.js應用中,使用Express框架和Mongoose庫來實現(xiàn)這一功能,文中有相關的代碼示例供大家參考,需要的朋友可以參考下
    2024-04-04
  • npm?工具庫?yenv使用簡介

    npm?工具庫?yenv使用簡介

    這篇文章主要為大家介紹了npm?工具庫?yenv使用簡介,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • Nodejs實現(xiàn)微信分賬的示例代碼

    Nodejs實現(xiàn)微信分賬的示例代碼

    這篇文章主要介紹了Nodejs實現(xiàn)微信分賬的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • Node.js中 __dirname 的使用介紹

    Node.js中 __dirname 的使用介紹

    這篇文章主要給大家介紹了關于Node.js中 __dirname使用的相關資料,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-06-06

最新評論