Node: Nodemon服务重启工具的详细使用

一、简介

Nodemon是一个非常好用的工具,它可以帮助开发者实现服务的自动重启。在服务端开发中,开发者经常会去修改文件然后进行调试,每次修改完如果需要人为去重新启动服务的话,非常浪费精力和时间。Nodemon这个工具正好提供了重启服务的功能,非常方便。

 

二、项目

还是采用上篇文章创建的项目为例,如下:

 

三、修改

1、添加脚本,修改启动方式,采用npm启动

//"start": 这个是启动的字段,可以自己定义,在终端运行时对应即可
//"node src/app.js": 这个是node运行的文件
{
  "name": "node-demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start":"node src/app.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

2、使用npm启动服务

//启动服务
npm start

//在终端启动后的结果输出如下
> node-demo@1.0.0 start /Users/xiayuanquan/Desktop/开发案例/NodeApp/node-demo
> node src/app.js

服务器启动

 

四、配置

使用上面的npm现在确实可以启动服务了。但是,并不能帮助开发者每次在重新修改完服务端文件如app.js文件后重新启动服务。如果不信,可以试着修改完app.js后再次刷新web,发现web结果不会发生变化。要想使用这个Nodemon的服务重启功能,需要先安装Nodemon,然后接着配置项目的package.json文件。添加一个重启的脚本即可,如下所示:

1、安装Nodemon

// -D: dev环境
npm install nodemon -D

//安装结果如下:
+ nodemon@2.0.2
added 106 packages from 53 contributors in 6.892s 

2、修改package.json的启动命令

//"start": 新的启动脚本
//"start:node": 原启动脚本
{
  "name": "node-demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start":"nodemon src/app.js",
    "start:node":"node src/app.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

2、使用npm启动服务

 xiayuanquan@XYQ  ~/Desktop/开发案例/NodeApp/node-demo  npm start

> node-demo@1.0.0 start /Users/xiayuanquan/Desktop/开发案例/NodeApp/node-demo
> nodemon src/app.js

[nodemon] 2.0.2                    //nodemon的版本
[nodemon] to restart at any time, enter `rs`    //输入rs可以手动重启,如下所示
[nodemon] watching dir(s): *.*           //监测的文件,"."表示所有的文件,开发者可以自定义设置  
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node src/app.js`
服务器启动
rs
[nodemon] starting `node src/app.js`
服务器启动

3、现在手动随意修改文件,可以发现服务都会立即重启,如下所示:

4、现在修改app.js中的控制台输出内容后,在web刷新发生了变化,如下:

//web 服务
//ajax --->api --->web server(node.js)

//导入http模块
const http = require('http');

//创建服务器实例
//req:请求内容
//res:响应内容
const server = http.createServer((req, res)=>{
    res.end('hello world, xiayuanquan');
});

//服务器设置监听
//3000:监听端口号
//127.0.0.1:监听主机
//()=>{}:监听回调
server.listen(3000,'127.0.0.1', ()=>{
    console.log('服务器启动');
});

5、现在的确实现了服务的重启功能。但是默认配置中,观察的文件是所有文件,这个对程序运行的性能是有影响的。对于一些无关紧要的文件的修改,不需要服务重启。我们可以单独给Nodemon创建一个配置文件,设置需要观察的文件。如下所示:

//监听的文件是src文件夹下任何子集下的任何文件
//也可以修改为监听js文件: "./src/**/*.js"

6、配置完后,在终端手动重启服务后。开发者再次对非观测的文件进行修改时,服务就不会重启了。只有对观测的文件做修改,服务才会传重启。

7、在启动服务时,可以打开debug模式,浏览全部的日志信息,如下所示: 

//DEBUG=* : 打开了debug模式
{
  "name": "node-demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "DEBUG=* nodemon src/app.js",
    "start:node": "node src/app.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "nodemon": "^2.0.2"
  }
}

启动后终端数据如下:

xiayuanquan@XYQ  ~/Desktop/开发案例/NodeApp/node-demo  npm start

> node-demo@1.0.0 start /Users/xiayuanquan/Desktop/开发案例/NodeApp/node-demo
> DEBUG=* nodemon src/app.js

  nodemon bus new listener: reset (0) +0ms
  nodemon bus new listener: reset (0) +2ms
  nodemon bus new listener: quit (0) +9ms
  nodemon bus new listener: quit (0) +0ms
  nodemon bus new listener: restart (0) +0ms
  nodemon bus new listener: restart (0) +0ms
  nodemon bus new listener: boot (0) +0ms
  nodemon bus new listener: boot (0) +0ms
  nodemon bus new listener: reset (2) +3ms
  nodemon bus emit: boot +2ms
  nodemon bus emit: reset +1ms
  nodemon resetting watchers +0ms
  nodemon reset +0ms
  nodemon config: dirs [ '/Users/xiayuanquan/Desktop/开发案例/NodeApp/node-demo/src' ] +0ms
[nodemon] 2.0.2
[nodemon] to restart at any time, enter `rs`
  nodemon bus new listener: error (0) +62ms
  nodemon bus new listener: error (0) +0ms
[nodemon] watching dir(s): src/**/*.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node src/app.js`
  nodemon:run fork sh -c node src/app.js +0ms
  nodemon bus new listener: exit (0) +9ms
  nodemon bus new listener: exit (0) +0ms
  nodemon:run start watch on: ./src/**/*.* +1ms
  nodemon start watch on: /Users/xiayuanquan/Desktop/开发案例/NodeApp/node-demo/src +70ms
  nodemon ignored [ '**/.git/**',
  '**/.nyc_output/**',
  '**/.sass-cache/**',
  '**/bower_components/**',
  '**/coverage/**',
  '**/node_modules/**',
  re: /.*.*\/\.git\/.*.*|.*.*\/\.nyc_output\/.*.*|.*.*\/\.sass\-cache\/.*.*|.*.*\/bower_components\/.*.*|.*.*\/coverage\/.*.*|.*.*\/node_modules\/.*.*/ ] +1ms
  nodemon:watch chokidar watching: /Users/xiayuanquan/Desktop/开发案例/NodeApp/node-demo/src/app.js +0ms
  nodemon watch is complete +25ms
服务器启动

 

posted @ 2019-12-29 00:08  XYQ全哥  阅读(1805)  评论(0编辑  收藏  举报