我们在开发Node服务时每当更改文件内容时都需要需重启一下服务功能才能生效,如果每次代码修改都要重复这样的操作势必会影响开发效率。所以我们希望每当文件被修改之后服务可以自行重启,不需要我们再去手动执行(把更多的精力都放到业务逻辑实现上)。而Nodemon就可以帮助我们实现这一功能,它可以监控你的node.js源码改变并自动重启你的服务器。

 

Node实战008:利用Nodemon实现服务自动重启
  Nodemon安装

在nodejs应用程序中使用Nodemon包非常简单,我们只要通过npm就可以快速地安装该工具包。为了可以直接使用nodemon来代替node启动应用我们采用全局安装,安装完 nodemon 后就可以用 nodemon 来代替 node 来启动应用。

npm install -g nodemon //如果想用nodemon来代替node启动应用可以全局安装

+ nodemon@2.0.7

added 117 packages from 53 contributors in 17.558s

11 packages are looking for funding

run `npm fund` for details

Nodemon使用

Nodemon使用非常的简单,直接nodemon + app(JavaScript文件)就可以启动了。你也可以在启动的时候添加参数来指定如何启动,比如以debug模式运行:node bin/app.js –debug。更多功能我们可以通过命令:nodemon -h 或者 nodemon –help来查看帮助文档,官网给出的几个nodemon例子。当我们通过nodemon启动服务后,它会监测项目中的所有文件。一旦发现文件有改动,nodemon会自动重启node服务。

# nodemon -h 或者 nodemon –help

Options:

–config file ………… alternate nodemon.json config file to use

-e, –ext ……………. extensions to look for, ie. js,pug,hbs.

-x, –exec app ……….. execute script with “app”, ie. -x “python -v”.

-w, –watch path ……… watch directory “path” or files. use once for

each directory or file to watch.

-i, –ignore …………. ignore specific files or directories.

-V, –verbose ………… show detail on what is causing restarts.

— ……….. to tell nodemon stop slurping arguments.

Examples:

$ nodemon server.js

$ nodemon -w ../foo server.js apparg1 apparg2

$ nodemon –exec python app.py

$ nodemon –exec “make build” -e “styl hbs”

$ nodemon app.js — –config # pass config to app.js

Nodemon配置

Nodemon除了可以通过命令行使用,也可以通过配置文件来使用。该文件一般命名为nodemon.json,放在当前项目的根目录中。在该文件中我们可以来配置nodemon属性,然后使用该–config 选项指定本地配置文件。

{

“restartable”:”rs”, //重启的命令,默认是rs,可以自定义

“ignore”:[“”], //忽略的文件,文件路径相对于nodemon.json所在位置

“verbose”: true, //输出详细启动与重启信息,false则不输出运行信息

“execMap”:{ //运行服务的后缀名和对应的运行命令

“js”:”node”, //nodemon代替node运行js后缀文件

},

“events”:{ //nodemon运行到某些状态时的触发事件

“start”:”gulp”, //子进程(即监控的应用)启动

“crash”:””, //子进程崩溃,不会触发 exit

“exit”:””, //子进程完全退出,不是非正常的崩溃

“restart”:”gulp”, //子进程重启

},

“ext”: “js json”, //监控指定后缀名的文件,用空格间隔

“watch”:[ //监控的文件夹路径或者文件路径

“./src/*” //文件路径相对于nodemon.json所在位置

],

“env”:{ //node运行环境

“NODE_ENV”:”env”, //env指开发环境; 运行环境 development; production 是生产环境

“PORT”:”8000″ //启动端口号

},

“legacy-watch”:false //开启Chokidar监控系统,失败则使用轮询模式(true)。

}

package.json设置

如果你不想配置nodemon.json文件也可以直接嵌入package.json文件中,每个项目的根目录下面都有一个package.json文件。该文件定义了项目所需要的各种模块以及项目的配置信息,也指定了项目所需的运行条件和开发环境。package.json文件是一个JSON对象,每个成员对应项目的一项设置。package.json详细配置可以参考文章:Node实战005:JavaScript包管理工具NPM详解,下面是nodemon官方提供的package.json设置示例。

{

“name”: “nodemon”,

“homepage”: “http://nodemon.io”,

“…”: “… other standard package.json values”,

“nodemonConfig”: {

“ignore”: [“test/*”, “docs/*”],

“delay”: “2500”

}

}

总结:

如果你在package.json中设置nodemon的话就不能再配置nodemon.json文件,否则package.json中的配置会被忽略。最简单的方法配置package.js 文件中的 scripts.start选项,指定 “start”: “nodemon ./bin/app.js”就可以用npm run start 来执行 nodemon ./bin/app.js。