Node允許監視文件或目錄是否發生變化。監視意味着當文件系統裏面的文件被創建、修改、刪除,都會觸發指定的回調函數。
Node提供的File System(文件系統)模塊中提供了兩個關於文件監控的函數:
fs.watchFile() - 實時監控文件變化
fs.watch() - 實時監控文件夾變化
Node API中明確提出:fs.watch() 比 fs.watchFile 和 fs.unwatchFile 更高效。 可能的話,應該使用 fs.watch 而不是 fs.watchFile 和 fs.unwatchFile。
首先以監控特定文件爲例,監視工作目錄下的.CSS文件:
創建watchFile.js文件
// 加載File System(文件系統)模塊
var fs = require('fs');
// 獲取工作目錄下所有文件
var files = fs.readdirSync(process.cwd());
files.forEach(function(file) {
// 監聽“.css”後綴的文件
if (/\.css/.test(file)) {
console.log('正在監控:' + process.cwd() + '/' + file);
fs.watchFile(process.cwd() + '/' + file, function(curr, prev) {
console.log('-' + file + ' changed !');
// 注意是"`"(筆記本鍵盤上數字1前面那個按鈕),不是單引號
console.log(`the current mtime is: ${curr.mtime}`);
console.log(`the previous mtime was: ${prev.mtime}`);
// 監測具體操作
if(Date.parse(prev.ctime) == Date.parse(curr.mtime)){
console.log('-' + file + ' 文件被創建');
}else if(Date.parse(curr.mtime) == 0){
console.log('-' + file + ' 文件被刪除');
}else if(Date.parse(curr.mtime) != Date.parse(prev.mtime)){
console.log('-' + file + ' 文件被修改');
}
});
}
});
監視工作目錄的下所有文件:創建watchFolder.js文件
// 加載File System(文件系統)模塊
var fs = require('fs');
// 獲取工作目錄下所有文件
var files = fs.readdirSync(process.cwd());
var count = 0;
// 列出所有監控的文件
console.log('正在監控:' + process.cwd());
files.forEach(function(file) {
console.log((++count) + ' ' + file);
});
// 監聽器回調有兩個參數 (eventType, filename)。 eventType 可以是 'rename' 或 'change',filename 是觸發事件的文件的名稱。
// 注意,在大多數平臺,當一個文件出現或消失在一個目錄裏時,'rename' 會被觸發。
fs.watch(process.cwd(), function(eventType, filename) {
console.log(`事件類型是: ${eventType}`);
if (eventType == 'change') {
console.log('文件:' + filename + ' 被修改!');
}
if (eventType == 'rename') {
console.log('文件:' + filename + ' 被新建/刪除!');
}
});
參考:
Node API:
http://nodejs.cn/api/fs.html#fs_fs_read_fd_buffer_offset_length_position_callback
Node.js 中File System模塊詳細介紹:
http://www.tuicool.com/articles/equ22ev
http://javascript.ruanyifeng.com/nodejs/fs.html#toc7
http://www.jianshu.com/p/5683c8a93511
Node.js中其他文件監控模塊:
http://www.cnblogs.com/cool-fire/p/6565242.html
http://tech.it168.com/a2015/0228/1707/000001707605.shtml