使用Node.JS監聽文件夾變化

jopen 9年前發布 | 29K 次閱讀 Node.js 開發 Node.js

使用Node.JS監聽文件夾改變有許多應用場合,比如:

構建自動編繹工具

當源文件改變時,自動運行build過程,比如當你寫CoffeeScript文件或SASS CSS文件時,保存之后可即時生成對應的JS或CSS.

構建自動布署工具

通過偵聽源文件夾的改變,你可以自動即時將改后的文件布署到測試服務器,加快你的開發測試速度。

這些工具其實都需要偵聽文件夾的改變,基于Node.JS的偵聽文件夾改變的模塊有很多。

fs.watch


其中Node.JS的文件系統也可偵聽某個目錄的改變, 如 fs.watch

fs.watch('somedir', function (event, filename) {
  console.log('event is: ' + event);
  if (filename) {
    console.log('filename provided: ' + filename);
  } else {
    console.log('filename not provided');
  }
});

其中fs.watch的最大缺點就是不支持子文件夾的偵聽,并且在很多情況下會偵聽到兩次事件(很多編輯器在保存的時侯是先把原文件清空,再進行保存,因此會觸發兩次文件夾改變事件)。因此需要一些開源的模塊來監聽文件夾目錄的改變。


chokidar


chokidar  是一個基于node.JS的監聽文件夾改變模塊。

安裝

npm install chokidar

示例

var chokidar = require('chokidar');

var watcher = chokidar.watch('file, dir, or glob', {   ignored: /[\/\]./, persistent: true });

var log = console.log.bind(console);

watcher   .on('add', function(path) { log('File', path, 'has been added'); })   .on('addDir', function(path) { log('Directory', path, 'has been added'); })   .on('change', function(path) { log('File', path, 'has been changed'); })   .on('unlink', function(path) { log('File', path, 'has been removed'); })   .on('unlinkDir', function(path) { log('Directory', path, 'has been removed'); })   .on('error', function(error) { log('Error happened', error); })   .on('ready', function() { log('Initial scan complete. Ready for changes.'); })   .on('raw', function(event, path, details) { log('Raw event info:', event, path, details); })</pre>


watch


Watch 是另一個監聽文件夾改變的Node.JS模塊


安裝

npm install watch

示例,偵聽所有改變事件

watch.watchTree('/home/mikeal', function (f, curr, prev) {
    if (typeof f == "object" && prev === null && curr === null) {
      // Finished walking the tree
    } else if (prev === null) {
      // f is a new file
    } else if (curr.nlink === 0) {
      // f was removed
    } else {
      // f was changed
    }
})

示例,偵聽不同事件

var watch = require('watch')
watch.createMonitor('/home/mikeal', function (monitor) {
    monitor.files['/home/mikeal/.zshrc'] // Stat object for my zshrc.
    monitor.on("created", function (f, stat) {
      // Handle new files
    })
    monitor.on("changed", function (f, curr, prev) {
      // Handle file changes
    })
    monitor.on("removed", function (f, stat) {
      // Handle removed files
    })
    monitor.stop(); // Stop watching
})
來自:http://ourjs.com/detail/54effe65232227083e000038

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!