node-supervisor
1.1、node-supervisor简介

在开发或调试Node.js应用程序的时候, 当修改了.js文件后,总是要先按下CTRL+C终止程序,然后再重新启动, 即使是修改一点小小的参数,也总是要不断地重复这几个很烦人的操作。

这是因为Node.js只有在第一次引用到某部份时才会去解析脚本文件, 以后都会直接访问内存,避免重复载入。

Node.js的这种设计虽然有利于提高性能,却不利于开发调试, 因为我们在开发过程中总是希望修改后立即看到效果,而不是每次都要终止进程并重启。

有没有办法做到当.js文件修改之后,Node.js自动重新启动(或重新加载文件)以节省时间呢?node-supervisor正是这样一个可以实现这种需求的Node.js包。

node-supervisor官网:https://github.com/petruisfan/node-supervisor

1.2、通过包管理器安装node-supervisor
包管理器安装命令
npmnpm install -g supervisor
yarnyarn global add supervisor
1.3、supervisor命令

supervisor命令的使用方式有如下两种:

supervisor [options] <program>
supervisor [options] -- <program> [args ...]

上面两种使用方式中都必须指定要执行的program, 对于Node.js程序来说,program就是指的启动Node.js程序的入口.js文件,比如./bin/www./src/private/server.js

上面两种使用方式的不同点,就在于,启动指定的Node.js程序的时候,是否要给它传递参数, 如果要传递参数,就在program的前面加上--

option都是可选的。

1.3.1、supervisor xx.js

这是最简单的使用方式。没有任何的option

假设,我们现在开发一个Node.js程序,这个Node.js程序的工程位于~/git/fpliu-blog,下面是该工程的目录结构:

~/git/fpliu-blog
├── gulpfile.js
├── node_modules
│   └── gulp
├── package-lock.json
├── package.json
└── src
    ├── public
    │   └── bower_components
    │       └── jquery
    └── private
        ├── app.js
        ├── config.js
        ├── server.js
        ├── routes
        │   └── index.js
        └── views
            └── index.ejs

./src/private/server.js就是该Node.js程序的入口文件。

使用supervisor命令启动它:

cd ~/git/fpliu-blog
supervisor src/private/server.js

运行效果如下:

从运行后的日志可以看出,使用node命令启动了src/private/server.js--watch--extensions--exec这3个参数我们没有指定,都使用了默认的值。--watch的默认值是.,在这个例子中就是~/git/fpliu-blog目录。

修改一下./src/private/目录中的任意一个.js文件,然后保存,我们会看到,立即打印出如下的日志:

这就表明,我们修改了--watch参数指定的被监控目录中的.js文件之后,node-supervisor自动重启了这个Node.js程序, 这样,我们就不用自己重启这个Node.js程序了,开发效率大大提高。

1.3.2、--watch <files | dirs>

--watch参数指定了要监控的目录或者文件。当监控到--watch指定的目录中的文件发生了变化, 就会重新启动程序。

--watch参数的值是一个或多个文件、一个或多个文件夹,多个之间用逗号隔开。

示例:

cd ~/git/fpliu-blog
supervisor --watch src/private src/private/server.js

运行效果如下:

上面的命令等同如下的命令:

cd ~/git/fpliu-blog/src/private
supervisor server.js

运行效果如下:

1.3.3、--ignore <files | dirs>

--ignore是排除--watch参数指定的目录下的一些文件。

示例:

cd ~/git/fpliu-blog
supervisor --watch src/private --ignore src/private/views src/private/server.js

因为src/private/views目录中存放的是ejs模板文件,这些文件变化了是不需要重新启动程序的。

1.3.4、--timestamp

如果指定了--timestamp参数,每次重新启动服务,都会打印出这次启动的时间戳。

示例:

cd ~/git/fpliu-blog/src/private
supervisor --ignore views --timestamp server.js

运行效果如下:

1.3.5、-V

如果指定了-V参数,启动的时候就会打印出一些额外的信息。

示例:

cd ~/git/fpliu-blog/src/private
supervisor --ignore views --timestamp -V server.js

运行效果如下: