本文已整理到 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
}

colours
colours 默認為 true,輸出信息顏色標示。
{
"colours": "false"
}

events
events 表示 nodemon 運行到某些狀態(tài)時的一些觸發(fā)事件,總共有五個狀態(tài):
-
start:子進程(即監(jiān)控的應用)啟動 -
crash:子進程崩潰,不會觸發(fā) exit -
exit:子進程完全退出,不是非正常的崩潰 -
restart:子進程重啟 -
config:update:nodemon 的 config 文件改變
restartable
restartable 設置重啟模式。重啟的命令,默認是 rs,可以改成你自己喜歡的字符串。
{
"restartable": "nv",
}
在運行的情況下輸入 rs 即可

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: {},
};
更多
gulp-nodemon 插件,將 nodemon 與項目的其余 gulp 工作流程集成在一起。
grunt-nodemon 插件,將 nodemon 與項目的其余 grun t工作流程集成在一起。