最近有個需求是掃描用例,用例是放在svn上,如果每次掃描都去遍歷目錄的話會有占用太多的io,所以想着用文件監控,有文件變化時只對該文件進行操作。
Nodejs里的 chokidar 模塊可以更好的對文件進行監控,不會產生多次的事件。
直接導出成一個公用方法:
var chokidar = require('chokidar') var watcher = null var ready = false module.exports.watch = function () { // 文件新增時 function addFileListener(path_) { if (ready) { console.log('File', path_, 'has been added') } } function addDirecotryListener(path) { if (ready) { console.log('Directory', path, 'has been added') } } // 文件內容改變時 function fileChangeListener(path_) { console.log('File', path_, 'has been changed') } // 刪除文件時,需要把文件里所有的用例刪掉 function fileRemovedListener(path_) { console.log('File', path_, 'has been removed') } // 刪除目錄時 function directoryRemovedListener(path) { log.info('Directory', path, 'has been removed') } if (!watcher) { watcher = chokidar.watch('/var/test/testproject') } watcher .on('add', addFileListener) .on('addDir', addDirecotryListener) .on('change', fileChangeListener) .on('unlink', fileRemovedListener) .on('unlinkDir', directoryRemovedListener) .on('error', function (error) { log.info('Error happened', error); }) .on('ready', function () { console.info('Initial scan complete. Ready for changes.'); ready = true }) }