抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

一直想做个监听文件改变后重启代码的程序,奈何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掉。

因为保存一次就会触发文件更新,如果一更新就重启的话未免太吃性能了,这里用到了防抖,效果:

未加防抖:

img

加防抖:

img

优雅!

评论