一直想做个监听文件改变后重启代码的程序,奈何nodejs的文件操作极其繁琐,今日见崔老师的操作,茅塞顿开。
监听文件更新可以用nodejs自带的fs.watch,但是兼容性不好。
这次用chokidar中的watch方法,优雅的很!
import chokidar from "chokidar";
import { spawn } from "child_process";
let childProcess = null;
const debounceRestart = debounce(restartProcess, 500);
// 监听文件更新
chokidar.watch(["CommonJS.js"]).on("all", (event, path) => {
console.log(event, path);
debounceRestart();
});
// 更新后的restart操作
function restartProcess() {
console.log("老子更新啦!");
childProcess && childProcess.kill();
childProcess = spawn("node", ["CommonJS.js"], {
stdio: [process.stdin, process.stdout, process.stderr],
});
}
// 防抖
function debounce(fn, delay) {
let id = null;
return () => {
clearTimeout(id);
id = setTimeout(() => {
fn();
}, delay);
};
}
崔老师演示的是写express服务器,启动一次会占用3000端口,再重启的时候需要把之前的kill掉。
因为保存一次就会触发文件更新,如果一更新就重启的话未免太吃性能了,这里用到了防抖,效果:
未加防抖:
加防抖:
优雅!