Node 工具 | nodemon 詳解

本文已整理到 Github,地址 ?? blog。

如果我的內(nèi)容幫助到了您,歡迎點個 Star ?????? 鼓勵鼓勵 :) ~~

我希望我的內(nèi)容可以幫助你?,F(xiàn)在我專注于前端領域,但我也將分享我在有限的時間內(nèi)看到和感受到的東西。


nodemon 是一種工具,可在檢測到目錄中的文件更改時通過自動重新啟動節(jié)點應用程序來幫助開發(fā)基于 node.js 的應用程序。

可以在 nodemon-demo 下進行測試

nodemon 特性

  • 自動重新啟動應用程序。
  • 檢測要監(jiān)視的默認文件擴展名。
  • 默認支持 node,但易于運行任何可執(zhí)行文件,如 python、ruby、make 等。
  • 忽略特定的文件或目錄。
  • 監(jiān)視特定目錄。
  • 使用服務器應用程序或一次性運行實用程序和 REPL。
  • 可通過 Node require 語句編寫腳本。
  • 開源,在 github 上可用。

安裝

全局安裝

$ npm i -g nodemon

本地安裝

$ npm i -D nodemon

注意:本地安裝需要在 package.json 文件的 script 腳本中指定要需要執(zhí)行的命令

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

使用 npm dev 運行

使用

nodemon 一般只在開發(fā)時使用,它最大的長處在于 watch 功能,一旦文件發(fā)生變化,就自動重啟進程。

# 默認監(jiān)視當前目錄的文件變化
$ nodemon app.js

# 指定主機和端口作為參數(shù),表示在本地 3697 端口啟動 node 服務 
$ nodemon app.js localhost 3697

參數(shù)

watch

監(jiān)控的文件夾路徑或者文件路徑。

watch 可以監(jiān)控多個目錄,默認值:'*.*'。默認情況下,nodemon 監(jiān)控當前工作目錄。如果您想要控制該選項,請使用該選項添加特定路徑:--watch

# 監(jiān)控指定文件夾或者文件變化
$ nodemon --watch app --watch libs app.js

現(xiàn)在,nodemon 只有在 ./app 目錄或 ./libs 目錄下文件發(fā)生變化時才會重新啟動。

ext

默認監(jiān)聽:"js, mjs, json"

監(jiān)控指定后綴名的文件,用空格間隔。

ext 監(jiān)聽指定文件擴展名的文件。默認情況下,nodemon 查找擴展名為 .js,.mjs,.coffee,.litcoffee,和 .json 的文件。

使用 -e--ext 指定監(jiān)聽的文件擴展名,如下所示:

$ nodemon -e js,pug

優(yōu)先級:nodemon 會先讀取 watch 里面需要監(jiān)聽的文件或文件路徑,再從文件中選擇監(jiān)控 ext 中指定的后綴名,最后去掉從 ignore 中指定的忽略文件或文件路徑。

exec

exec 執(zhí)行項。若設定了執(zhí)行項,nodemon 將執(zhí)行程序而不是 JavaScript 腳本。

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

ignore

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

注意,默認情況下,nodemon會忽略 .git,node_modules,bower_components,.nyc_output,coverage.sass-cache 目錄,并添加你的忽略模式到列表中。將 ignore 置空并不能取消忽略。

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

# 忽略多個目錄
$ nodemon --ignore lib/ --ignore tests/

# 使用通配符匹配(但是一定要引用引號),* 表示該文件夾下的所有后綴為 .js 的文件
$ nodemon --ignore 'lib/*.js'

execMap

execMap 設置運行服務的后綴名與對應的命令。

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

可以用來定義默認可執(zhí)行文件,如果您使用的語言在默認情況下不受 Node 支持,則此應用特別有用。

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

現(xiàn)在運行以下命令,nodemon 將知道將其 perl 用作可執(zhí)行文件:

$ nodemon app.pl

設置運行服務的后綴名與對應的命令

delay

delay 延遲重啟時間(毫秒)。延遲重啟類似于 JavaScript 函數(shù)中的函數(shù)節(jié)流,只在最后一次更改的文件往后延遲重啟,以避免了短時間多次重啟。

$ 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 運行到某些狀態(tài)時的一些觸發(fā)事件,總共有五個狀態(tài):

  • start:子進程(即監(jiān)控的應用)啟動
  • crash:子進程崩潰,不會觸發(fā) exit
  • exit:子進程完全退出,不是非正常的崩潰
  • restart:子進程重啟
  • config:update:nodemon 的 config 文件改變

參考:使用 nodemon 作為子進程

restartable

restartable 設置重啟模式。重啟的命令,默認是 rs,可以改成你自己喜歡的字符串。

{
  "restartable": "nv",
}

在運行的情況下輸入 rs 即可

restartable

env

env 運行環(huán)境

{
  "env": {
    "NODE_ENV": "development", // 開發(fā)環(huán)境
    "PORT": "3000" // 端口號
  }
}

配置文件

你可以在命令行中添加參數(shù)選項以支持某種功能,也可以使用本地和全局配置文件。可以使用該 --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"]
  }
}

優(yōu)先級:本地配置文件 -> nodemonConfig -> 全局配置文件。命令行中指定的參數(shù)選項會被本地配置文件覆蓋,而在 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 的實用程序動態(tài)附加 .cmd
  },
  watch: ['*.*'],
  stdin: true,
  runOnChangeOnly: false, // 為 true 時運行 nodemon xxx 項目不會啟動,只保持對文件的監(jiān)控,當監(jiān)控的文件有修改并保存時才會啟動應用,其他沒有影響。默認是 false 即一開始就啟動應用并監(jiān)控文件改動。
  verbose: false,
  signal: 'SIGUSR2',
  stdout: true, // 這個是關于標準輸入輸出的設置,上文提到 nodemon.json 文件中的 events 字段可以為狀態(tài)設置標準輸入輸出語句,如果這里設置了 false,標準輸入輸出語句就會失效。
  watchOptions: {},
};

更多

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容