Node 工具 | nodemon 详解

本文已整理到 Github,地址 👉 blog

如果我的内容帮助到了您,欢迎点个 Star 🎉🎉🎉 鼓励鼓励 :) ~~

我希望我的内容可以帮助你。现在我专注于前端领域,但我也将分享我在有限的时间内看到和感受到的东西。


nodemon 是一种工具,可在检测到目录中的文件更改时通过自动重新启动节点应用程序来帮助开发基于 node.js 的应用程序。

可以在 nodemon-demo 下进行测试

nodemon 特性

  • 自动重新启动应用程序。
  • 检测要监视的默认文件扩展名。
  • 默认支持 node,但易于运行任何可执行文件,如 python、ruby、make 等。
  • 忽略特定的文件或目录。
  • 监视特定目录。
  • 使用服务器应用程序或一次性运行实用程序和 REPL。
  • 可通过 Node require 语句编写脚本。
  • 开源,在 github 上可用。

安装

全局安装

$ npm i -g nodemon

本地安装

$ npm i -D nodemon

注意:本地安装需要在 package.json 文件的 script 脚本中指定要需要执行的命令

{
  "script": {
    "dev": "nodemon app.js"
  }
}

使用 npm dev 运行

使用

nodemon 一般只在开发时使用,它最大的长处在于 watch 功能,一旦文件发生变化,就自动重启进程。

# 默认监视当前目录的文件变化
$ nodemon app.js

# 指定主机和端口作为参数,表示在本地 3697 端口启动 node 服务 
$ nodemon app.js localhost 3697

参数

watch

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

watch 可以监控多个目录,默认值:'*.*'。默认情况下,nodemon 监控当前工作目录。如果您想要控制该选项,请使用该选项添加特定路径:--watch

# 监控指定文件夹或者文件变化
$ nodemon --watch app --watch libs app.js

现在,nodemon 只有在 ./app 目录或 ./libs 目录下文件发生变化时才会重新启动。

ext

默认监听:"js, mjs, json"

监控指定后缀名的文件,用空格间隔。

ext 监听指定文件扩展名的文件。默认情况下,nodemon 查找扩展名为 .js.mjs.coffee.litcoffee,和 .json 的文件。

使用 -e--ext 指定监听的文件扩展名,如下所示:

$ nodemon -e js,pug

优先级:nodemon 会先读取 watch 里面需要监听的文件或文件路径,再从文件中选择监控 ext 中指定的后缀名,最后去掉从 ignore 中指定的忽略文件或文件路径。

exec

exec 执行项。若设定了执行项,nodemon 将执行程序而不是 JavaScript 脚本。

$ nodemon --exec "python -v" ./app.py

ignore

ignore 忽略项(包括文件、目录或文件名通配符匹配)。

注意,默认情况下,nodemon会忽略 .gitnode_modulesbower_components.nyc_outputcoverage.sass-cache 目录,并添加你的忽略模式到列表中。将 ignore 置空并不能取消忽略。

# 忽略特定的文件
$ nodemon --ignore lib/app.js

# 忽略多个目录
$ nodemon --ignore lib/ --ignore tests/

# 使用通配符匹配(但是一定要引用引号),* 表示该文件夹下的所有后缀为 .js 的文件
$ nodemon --ignore 'lib/*.js'

execMap

execMap 设置运行服务的后缀名与对应的命令。

{
  "execMap": {
    "js": "npm -v"
  }
}

可以用来定义默认可执行文件,如果您使用的语言在默认情况下不受 Node 支持,则此应用特别有用。

{
  "execMap": {
    "pl": "perl"
  }
}

现在运行以下命令,nodemon 将知道将其 perl 用作可执行文件:

$ nodemon app.pl

设置运行服务的后缀名与对应的命令

delay

delay 延迟重启时间(毫秒)。延迟重启类似于 JavaScript 函数中的函数节流,只在最后一次更改的文件往后延迟重启,以避免了短时间多次重启。

$ nodemon --delay 10 app.js
$ nodemon --delay 2.5 app.js
$ nodemon --delay 2500ms app.js

verbose

verbose 设置日志输出模式,true 详细模式

{
  "verbose": true
}
verbose

colours

colours 默认为 true,输出信息颜色标示。

{
  "colours": "false"
}
colours

events

events 表示 nodemon 运行到某些状态时的一些触发事件,总共有五个状态:

  • start:子进程(即监控的应用)启动
  • crash:子进程崩溃,不会触发 exit
  • exit:子进程完全退出,不是非正常的崩溃
  • restart:子进程重启
  • config:update:nodemon 的 config 文件改变

参考:使用 nodemon 作为子进程

restartable

restartable 设置重启模式。重启的命令,默认是 rs,可以改成你自己喜欢的字符串。

{
  "restartable": "nv",
}

在运行的情况下输入 rs 即可

restartable

env

env 运行环境

{
  "env": {
    "NODE_ENV": "development", // 开发环境
    "PORT": "3000" // 端口号
  }
}

配置文件

你可以在命令行中添加参数选项以支持某种功能,也可以使用本地和全局配置文件。可以使用该 --config 选项指定备用本地配置文件。

// nodemon.json
{
  "restartable": "nv",
  "delay": 1000,
  "colours": false,
  "verbose": true,
  "ignore": [
    "./src"
  ],
  "watch": [
    "app.js",
    "src"
  ],
  "events": {
    "restart": "osascript -e 'display notification \"app restarted\" with title \"nodemon\"'"
  },
  "execMap": {
    "js": "npm -v"
  },
  "ext": "js, json",
  "env": {
    "NODE_ENV": "development",
    "PORT": "3000"
  }
}

你还可以在 package.json 中使用 nodemonConfig 字段进行配置,这时独立配置文件将被忽略。

{
  "name": "demo",
  "nodemonConfig": {
    "ignore": ["node_modules", "dist"], // 忽略 node_modules 和 dist 文件 
    "delay": "2500",
    "watch": ["app.js", "src"]
  }
}

优先级:本地配置文件 -> nodemonConfig -> 全局配置文件。命令行中指定的参数选项会被本地配置文件覆盖,而在 package.json 中配置的会被命令行覆盖。

每次修改配置文件修改完记得重启一下。

nodemon 的默认配置文件

nodemon 的默认配置文件

var ignoreRoot = require('ignore-by-default').directories();

// 默认选项配置选项
module.exports = {
  restartable: 'rs',
  colours: true,
  execMap: {
    py: 'python',
    rb: 'ruby',
    ts: 'ts-node',
    // 更多的可以在这里添加,如 ls:lsc - 但请确保它是交叉的与 linux、mac 和 windows 兼容,或使 default.js 为基于 node 的实用程序动态附加 .cmd
  },
  watch: ['*.*'],
  stdin: true,
  runOnChangeOnly: false, // 为 true 时运行 nodemon xxx 项目不会启动,只保持对文件的监控,当监控的文件有修改并保存时才会启动应用,其他没有影响。默认是 false 即一开始就启动应用并监控文件改动。
  verbose: false,
  signal: 'SIGUSR2',
  stdout: true, // 这个是关于标准输入输出的设置,上文提到 nodemon.json 文件中的 events 字段可以为状态设置标准输入输出语句,如果这里设置了 false,标准输入输出语句就会失效。
  watchOptions: {},
};

更多

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,063评论 6 510
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,805评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,403评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,110评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,130评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,877评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,533评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,429评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,947评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,078评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,204评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,894评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,546评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,086评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,195评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,519评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,198评论 2 357

推荐阅读更多精彩内容