保存文件时自动重启进程

date
May 20, 2021
slug
node-auto-reload
status
Published
tags
Node.Js
type
Post
summary
保存文件时自动重启进程

1.需求

学习http协议的时候,用node.js创建了http服务,在客户端与服务端通信,但是有一个问题就是当我退出主进程的时候,监听端口的进程并没有退出,一开始是手动在cmd里面杀进程,但是这样太麻烦了,于是想做个自动杀进程的工具,顺便学一下进程管理。
  • ctrl+s保存的时候,服务自动重启
  • 手动输入stop杀进程,输入reload重启
  • (这个不考虑是否多次一举,就是我学node和http的练手而已)

2.准备

这里是一个http服务,根据不同的url在‘访问在’public“文件夹的不同文件

2.实现重启和关闭

退出进程的方式有几种终端杀进程关闭会话窗口(就是直接退出创建进程的终端)父进程关闭(父进程创建的子进程,他有子进程的控制权,所以父进程可以关闭子进程)这个文件此时有两个进程js进程监听端口的进程关闭js父进程的时候,监听端口的子进程没有关闭父进程和子进程的关系父进程可以控制子进程,但是清除父进程不能关闭子进程关闭父进程 子进程不会关闭,但是关闭子进程父进程可能关闭 因为进程在有任务的时候不会被关闭,比如写了个死循环,这个进程会一种阻塞在那一直不会关,或者是创建了个子进程,而子进程在活跃的时候,父进程也不会关闭总结:我们只需要把server的进程关掉,js的主进程也就被关闭了

2.1 实现输入stop进程关闭

2.2 输入reload 重启

只需要在上面代码基础上加上重启就可以了

3 实现自动化

  • 新建个文件叫做index.js
  • 此时有两个文件和一个文件夹
    • public里面装着要访问的资源
    • 通过index.js启动server.js
    • server.js里面是刚刚写的reloadstopserever

3.1 用index.js启动server.js

  • fork直接执行node文件,只能开node子进程
  • 此时现在有三个进程
      1. index是一个主进程
      1. 用index启动了个server的子进程
      1. server进程里还监听了端口

3.2 server.jsindex.js通信

  • index.js输入stop或者reload传输给server.js
  • send()message事件

3.3 监听文件

  • 监听文件,当文件有改动时,(ctrl+s)就启动重启服务
    • 其实保存了就有写入流,就会被重启

    3.1.1现在有一个问题

    在保存时,服务会被自动重启三次
    notion image
    这是由于windows调用api的问题
    需要我们写个防抖,让函数只被执行一次。注意这里watch没有被执行好多次,真正被执行好几次的是里面的callback
    • 用lodash这个小工具合集里的防抖
      • 输入npm install lodash —save
      • const lodash = require('lodash')
      • lodash.debounce()就防抖了
        • notion image
    • 防抖函数
      此时就大功告成了😊

      4 源码

      index.js

      server.js

      最后欢迎来我的GitHub捧场(虽然没啥拿得出手的东西)

      © dana 2023 - 2025