使用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的监听文件夹改变模块。
安装
示例
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); }) |
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 }) 转载于:https://www.cnblogs.com/rubylouvre/p/4445121.html |