如何使用NodeJs来监听文件变化

JavaScript023

如何使用NodeJs来监听文件变化,第1张

1.前言

在我们调试修改代码的时候,每修改一次代码,哪怕只是很小的修改,我们都需要手动重新build文件,然后再运行代码,看修改的效果,这样的效率特别低,对于开发者来说简直不能忍。

2.构建自动编译工具

如何使用nodeJs来监听文件变化,一旦源文件修改保存时,自动运行build过程。比如当你写CoffeeScript文件或SASS文件时,保存之后可即时生成对应的JS或CSS.

基于Node.JS的侦听文件夹改变的模块有很多。

a . fs.watch。Node.JS的文件系统也可侦听某个目录的改变

fs.watch的最大缺点就是不支持子文件夹的侦听,并且在很多情况下会侦听到两次事件(很多编辑器在保存的时侯是先把原文件清空,再进行保存,因此会触发两次文件夹改变事件)。因此需要一些开源的文件夹监听文件夹目录的改变。

b. Chokidar。chokidar 是一个基于node.JS的监听文件夹改变模块

步骤: 1. 运行 npm install chokidar --save-dev

npm install [-g] shelljs

2. 创建一个文件helper.js

3. 在helper.js文件中写入:

var chokidar = require('chokidar')

var shelljs = require('shelljs')

chokidar.watch('accordion').on('change', function(){

'use strict'

shelljs.exec("grunt build:accordion")

shelljs.exec("node helper.js")

//shelljs.exit(1) 执行完就退出

})

在控制台输出:node helper.js就可以使用chokidar来监控我们的test.html 文件的变化,这里是监控change变化,一旦test.html 文件有修改并保存,那么控制台就会输出语句:aaa.

shellJs是用来执行命令

c. Watch. Watch 是另一个监听文件夹改变的Node.JS模块

类似chokidar的用法,推荐chokidar

第一步,在全局环境中安装node inspector。第二步,安装完成之后,以调试模式运行需要调试的node代码。第三步,启动node inspector。第四步,就可以看到,一个模拟Chrome调试窗口的页面,加载了node中的所有代码。

nodejs是单线程运行的,通过一个事件循环来循环取出消息队列(event queue)中的消息进行处理,处理过程基本上就是去调用该消息对应的回调函数。

function watchResponseFile(filePath, num, response) {

if (num <10) {

fs.exists(filePath, function (exists) {

if (exists) {

fs.readFile(filePath, "utf-8", function (err, data) {

if (!err) {

response.writeHead(200, { "Content-Type": "text/json" })

response.write(data)

response.end()

}

else {

response.writeHead(200, { "Content-Type": "text/json" })

response.write("fail:" + err)

response.end()

}

//删除响应文件

fs.unlink(filePath, function (err) {

})

})

}

else {

num = num + 1

setTimeout(watchResponseFile(filePath, num, response), 10000)

}

})

}