目的
开发中监听文件修改,达到重启node等项目服务的作用,减少手动执行:[Ctrl-C] [Up-Arrow] [Enter]。使用nodemon代替node去启动项目服务,nodemon [your node app](相当于 node [your node app]),监听进程。
安装
npm install -g nodemon
使用
命令行模式
nodemon --ignore dist/ --ignore node_modules/ --watch src -C -e js,json,css,scss,vue --debug -x "npm run build"
配置文件模式
nodemon --config nodemon.json -x "npm run build"
// nodemon.json
{
"restartable": "rs",
"ignore": [
"dist",
"node_modules/**/node_modules",
],
"verbose": true,
"execMap": {
"js": "node --harmony"
},
"events": {
"restart": "osascript -e 'display notification \"App restarted due to:\n'$FILENAME'\" with title \"nodemon\"'"
},
"watch": [
"src",
],
"env": {
"NODE_ENV": "development"
},
"ext": "js,json,css,scss,vue"
}
命令行优先级高于配置文件,命令行模式中的参数设置会覆盖掉配置文件的参数配置。
参数说明
-
restartable:重启的命令,默认是 rs ,可以自定义字符串。当用 nodemon 启动应用后,在监听窗口直接输入rs 可直接重启服务,不需要停止服务在重启。除了字符串值外,设置为 false 则不会在 nodemon 运行期间监听 rs 的重启命令,避免影响了其他终端命令。
-
ignore:忽略的文件后缀名或者文件夹,文件路径的书写用相对于 nodemon.json 所在位置的相对路径。nodemon 默认忽略的文件有:.git, node_modules, bower_components, .sass-cache,如果这些文件想要加入监控,需要重写默认忽略参数字段 ignoreRoot,比如加入:"ignoreRoot": [".git", "bower_components", ".sass-cache"],然后在 watch 中将 node_modules 文件路径加入监控,那么 node_modules 内的文件也加入了监控。
-
verbose:true 表示输出详细启动与重启信息,默认false不输出。
$ nodemon --config 'nodemon.json' -x 'npm run build'
[nodemon] 2.0.19
[nodemon] reading config ./nodemon.json
[nodemon] to restart at any time, enter `rs`
[nodemon] or send SIGHUP to 39624 to restart
[nodemon] ignoring: node_modules/**/node_modules ./dist/**/*
[nodemon] watching path(s): src/**/*
[nodemon] watching extensions: js,json,css,scss,vue
[nodemon] bind restart -> `osascript -e 'display notification "App restarted due to:
'$FILENAME'" with title "nodemon"'`
[nodemon] starting `npm run build`
[nodemon] spawning
[nodemon] child pid: 39626
[nodemon] watching 409 files
-
execMap:运行服务的后缀名和对应的运行命令,"js": "node --harmony" 表示用 nodemon 代替 node --harmony 运行 js 后缀文件;"": "node" 指 www 这些没有后缀名的文件;默认的 defaults.js 配置文件会识别一些文件:py: 'python',rb: 'ruby'。
-
events:表示 nodemon 运行到某些状态时的一些触发事件,总共有五个状态:
-
start - 子进程(即监控的应用)启动
-
crash - 子进程崩溃,不会触发 exit
-
exit - 子进程完全退出,不是非正常的崩溃
-
restart - 子进程重启
-
config:update - nodemon 的 config 文件改变
状态后面可以带标准输入输出语句,比如 mac 系统下设置: "start": "echo 'app start'",那么启动应用时会输出 app start 信息。除此之外,也可以写js来监控,github 上有介绍: events.md(https://github.com/remy/nodemon/blob/master/doc/events.md)。
macos神器osascript可以显示桌面通知,语法如下:
osascript -e ' display notification "通知内容" with title "标题" subtitle "子标题" '
image.png
-
watch:监控的文件夹路径或者文件路径。
-
env:运行环境 development 是开发环境,production 是生产环境,port 是端口号。
-
ext:监控指定后缀名的文件,用逗号间隔。默认监控的后缀文件:.js, .coffee, .litcoffee, .json。
注:关于监控以及忽略文件修改有个顺序的问题,或者说优先级,首先 nodemon 会先读取 watch 里面需要监控的文件或文件路径,再从文件中选择监控 ext 中指定的后缀名,最后去掉从 ignore 中指定的忽略文件或文件路径。
总结
进程管理工具除了nodemon外,还有forever,supervisor,pm2等,他们对比链接,有兴趣可以阅读,开发中nodemon还是比较合适,生产的话用pm2会更好些。
另外,官方也有整理出一些常见问题:https://github.com/remy/nodemon/blob/master/faq.md
网友评论