nodemon 基本配置与使用

      在开发环境下,每每须要一个工具来自动重启项目工程,以前接触过 python 的 supervisor,如今写 node 的时候发现 supervisior 在不少地方都有他的身影,node 也有一个 npm 模块 supervisior 也是用来监控进程的,不过除了 supervisior 外,还有不少其余的工具,从 github 的评分上看,比较热门的有 forever,nodemon,node-dev,具体这些工具的区别能够参考这篇文章 Comparison: Tools to Automate Restarting Node.js Server After Code Changes,我的以为在开发环境仍是用 nodemon,由于配置比较方便,文档也很清晰。因此这里先主要讲 nodemon。html

nodemon 的安装:node

npm install -g nodemon

安装完 nodemon 后,就能够用 nodemon 来代替 node 来启动应用:python

nodemon [your node app](至关于 node [your node app])

若是没有在应用中指定端口,能够在命令中指定:linux

nodemon ./server.js localhost 8080

能够运行 debug 模式:git

nodemon --debug ./server.js 80

查看帮助,帮助里面有不少选项都是一目了然:github

nodemon -h 或者 nodemon -help

nodemon 比较流行的缘由之一就是它的可配置性比较高,下面是官网给出的配置文件 nodemon.json 的例子,加上我本身了解到的有用的一些配置,开发环境建议能够把每一个参数都写上备用,生产环境就把没有必要的参数去掉,有些字段是能够在命令行模式以参数形式给出的,能够经过 -h 查看,下面逐个解释:npm

 1 {
 2     "restartable": "rs",
 3     "ignore": [
 4         ".git",
 5         "node_modules/**/node_modules"
 6     ],
 7     "verbose": true,
 8     "execMap": {
 9         "": "node"
10         "js": "node --harmony"
11     },
12     "events": {
13         "restart": "osascript -e 'display notification \"App restarted due to:\n'$FILENAME'\" with title \"nodemon\"'"
14     },
15     "watch": [
16         "test/fixtures/",
17         "test/samples/"
18     ],
19     "env": {
20         "NODE_ENV": "development",
21         "PORT": "3000"
22     },
23     "ext": "js json",
24     "legacy-watch": false
25 }
View Code

restartable:重启的命令,默认是 rs ,能够改为你本身喜欢的字符串。当用 nodemon 启动应用时,能够直接键入 rs 直接重启服务。除了字符串值外,还能够设置 false 值,这个值的意思是当 nodemon 影响了你本身的终端命令时,设置为 false 则不会在 nodemon 运行期间监听 rs 的重启命令。json

ignore:忽略的文件后缀名或者文件夹,文件路径的书写用相对于 nodemon.json 所在位置的相对路径,下同。nodemon 会默认忽略一些文件,默认忽略的文件有:.git, node_modules, bower_components, .sass-cache,若是这些文件想要加入监控,须要重写默认忽略参数字段 ignoreRoot,好比加入:"ignoreRoot": [".git", "bower_components", ".sass-cache"],而后在 watch 中将 node_modules 文件路径加入监控,那么 node_modules 内的文件也加入了监控了。windows

verbose:true 表示输出详细启动与重启信息,以下图:sass

false 表示不输出这些运行信息,以下图:

execMap:运行服务的后缀名和对应的运行命令,"js": "node --harmony" 表示用 nodemon 代替 node  --harmony 运行 js 后缀文件;"" 指 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 信息,其余相似命令如 ls,ps 等等标准命令均可以在这里定义。除此以外,也能够写js来监控,github 上有介绍: events.md,不过我试过以后没有成功,若是有懂的朋友,记得在评论不吝赐教。^_^

watch:监控的文件夹路径或者文件路径。

env:运行环境 development 是开发环境,production 是生产环境。port 是端口号。

ext:监控指定后缀名的文件,用空格间隔。默认监控的后缀文件:.js, .coffee, .litcoffee, .json。可是对于没有文件后缀的文件,好比 www 文件,我暂时找不到怎么用 nodemon 去监控,就算在 watch 中包含了,nodemon 也会忽略掉。

注:关于监控以及忽略文件修改有个顺序的问题,或者说优先级,首先 nodemon 会先读取 watch 里面须要监控的文件或文件路径,再从文件中选择监控 ext 中指定的后缀名,最后去掉从 ignore 中指定的忽略文件或文件路径。

legacy-watch:nodemon 使用 Chokidar 做为底层监控系统,可是若是监控失效,或者提示没有须要监控的文件时,就须要使用轮询模式(polling mode),即设置 legacy-watch 为 true,也能够在命令行中指定:

$ nodemon --legacy-watch 
$ nodemon -L # 简写

下面贴出 nodemon 的默认配置文件 default.js

 1 // default options for config.options
 2 module.exports = {
 3     restartable: 'rs',
 4     colours: true,
 5     execMap: {
 6         py: 'python',
 7         rb: 'ruby',
 8         // more can be added here such as ls: lsc - but please ensure it's cross
 9         // compatible with linux, mac and windows, or make the default.js
10         // dynamically append the `.cmd` for node based utilities
11     },
12     ignoreRoot: ['.git', 'node_modules', 'bower_components', '.sass-cache'],
13     watch: ['*.*'],
14     stdin: true,
15     runOnChangeOnly: false,
16     verbose: false,
17     // 'stdout' refers to the default behaviour of a required nodemon's child,
18     // but also includes stderr. If this is false, data is still dispatched via
19     // nodemon.on('stdout/stderr')
20     stdout: true,
21 };
View Code

有几个比较少用到的配置字段:

1)colous:输出信息颜色标示。

2)runOnChangeOnly:true 时运行 nodemon www 项目不会启动,只保持对文件的监控,当监控的文件有修改并保存时才会启动应用,其余没有影响。默认是 false 即一开始就启动应用并监控文件改动。

3)stdin,stdout:这个是关于标准输入输出的设置,上文提到 nodemon.json 文件中的 events 字段能够为状态设置标准输入输出语句,若是这里设置了 false,标准输入输入语句就会实效。

github 上给出了一个 faq.js 解答了一些常见的问题,有的上文已经提到,还有一些比较常见的列举以下:

1)当本身的应用启动服务带的参数和 nodemon 冲突时,能够利用下面的方法来解决冲突:

$ nodemon app.js -- -L -opt2 -opt3

以 -- 为分隔,nodemon 不会去读取 -- 后面的参数,而是传给 app.js。

2)当应用由于某些缘由奔溃时,nodemon 不会自动重启,会输出如下信息:

[nodemon] app crashed - waiting for file changes before starting...

这个时须要修改文件并保存后 nodemon 才会重启应用,这在开发环境没什么关系,可是若是想把 nodemon 放在线上时,咱们每每但愿 nodemon 可以自动重启崩溃的应用,这个时候就须要 forever 来辅助了,有一个 issue 专门讲这个问题。使用 forever 来重启 nodemon 时,在 nodemon 启动时须要加个参数 --exitcrash:

nodemon www --exitcrash

这样当应用崩溃后,nodemon 会自动中断退出,forever 检测到 nodemon 退出后就会重启 nodemon,nodemon 又会重启应用。其余就是 forever 的配置了,由于这里只讲 nodemon,因此就不涉及 forever,到时候总结 forever 的时候再讲,感兴趣的看这里

3)若是想经过 npm start 命令来启动应用同时又想用 nodemon 来监控文件改动,能够修改 npm 的 package.js 文件中的 scripts.start:

1 "scripts": {
2     "start": "nodemon ./bin/www"
3 }

那么用 npm start 启动后就是执行 nodemon ./bin/www。

 

本文来源:JuFoFu

本文地址:http://www.cnblogs.com/JuFoFu/p/5140302.html

 

参考文档:

github remy/nodemon . README.md

github remy/nodemon . faq.md

github remy/nodemon . events.md

codeplex . nodemon

bubkoo . 在 Express 开发中使用 nodemon

Qihan Zhang . Comparison: Tools to Automate Restarting Node.js Server After Code Changes

 

水平有限,错误欢迎指正。原创博文,转载请注明出处。

相关文章
相关标签/搜索