nodemon的使用

目的

开发中监听文件修改,达到重启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

你可能感兴趣的:(nodemon的使用)