打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Node 工具 | nodemon 详解


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


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: {},
};
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
使用nodemon让代码修改完自动重启
Vue2+Koa2+Typescript前后端框架教程--02后端KOA2框架自动重启编译服务(nodemon)
Node.js 自启动工具(supervisor 和 nodemon )
如何在vscode里面调试js和node.js
Angular编译运行
React Native 你该了解的Hello World
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服