簡介 nodemon用來監視node.js應用程式中的任何更改並自動重啟服務,非常適合用在開發環境中。以前,我們開發一個node後端服務時,每次更改文件,均需重啟一下,服務才能生效。這使我們的開發效率降低了很多。nodemon的出現,可以隨時監聽文件的變更,自動重啟服務,我們開發時只需關註代碼即可, ...
簡介
nodemon用來監視node.js應用程式中的任何更改並自動重啟服務,非常適合用在開發環境中。以前,我們開發一個node後端服務時,每次更改文件,均需重啟一下,服務才能生效。這使我們的開發效率降低了很多。nodemon的出現,可以隨時監聽文件的變更,自動重啟服務,我們開發時只需關註代碼即可,不再需要手動重啟服務。
【在之前我們啟動應用服務採用的方式都是node app.js
,但我們每次修改完node
代碼之後都需要重啟伺服器即是重新運行命令node app.js
才能完成修改。現在使用nodemon
替代node
在開發環境下啟動服務就不會這麼麻煩了。nodemon
將監視啟動目錄中的文件,如果有任何文件更改,nodemon
將自動重新啟動node
應用程式。nodemon
不需要對代碼或開發方式進行任何更改。 nodemon
只是簡單的包裝你的node
應用程式,並監控任何已經改變的文件。nodemon
只是node
的替換包,只是在運行腳本時將其替換命令行上的node
。】
安裝
全局安裝
npm install -g nodemon
啟動應用
nodemon [your node app] nodemon index.js
使用
1、配置命令行:在package.json的scripts中配置
2、配置nodemon.json文件
3、配置package.json中的nodemonConfig
其中命令行:
"scripts": { "start": "nodemon --watch src/ -e js,coffee app.js" },
等價於配置文件(nodemon.json)
{ watch: ['src/'], ignore: [], script: 'app.js' options: { extensions: ['js', 'coffee'], exec: 'node' } }
命令行
"scripts": { "start": "nodemon" },
等價於配置文件(nodemon.json)
{ watch: [], // meaning all subdirectories ignore: [], script: 'index.js', options: { extensions: ['js'], exec: 'node' } }
其option 轉化邏輯為
讀命令行參數--->若無,查找本地local配置文件-->若無,查找全局配置文件->若無,嘗試package.json中的main和start-->查找index.js
因此 配置啟動文件,可加快啟動速度,避免深度查找
不想在項目中單獨維護nodemon.json配置文件,可在package.json中設置
package.json設置方法如下:
{ "name": "nodemon", "homepage": "http://nodemon.io", "...": "... other standard package.json values", "nodemonConfig": { "ignore": ["test/*", "docs/*"], "delay": "2500" } }
需要註意的是,不能再通過--config 設置文件,且本地不能再保存nodemon.json文件,否則package.json中的配置將被忽略
配置
nodemon --help或者nodemon -h
查看一下nodemon
可以支持哪些運行參數。
-
--config 可設置指定配置文件
-
--ext 設置監聽文件的尾碼擴展名,如想要監聽ts文件的變更,需設置-e ts(文件尾碼名)
-
--exec 執行腳本(執行的命令)
-
--watch 設置要監聽的文件路徑
-
--ignore 設置無需監聽的文件路徑
-
--verbose
:設置日誌輸出模式,true
為詳細模式
這些參數也可通過配置nodemon.json
文件來使用。
{ "restartable": "rs", "verbose": true, "watch": [ "config/", "router/", "utils/", "views/", "app.ts", "index.ts" ], "ignore": [ "test/*.spec.ts" ], "delay": "1000", "exec": "TS_NODE_PROJECT=tsconfig.server.json node --inspect -r ts-node/register ./app.ts", "ext": "ts ejs yml json" }
nodemon.json
各配置項含義。
-
restartable
:設置重啟模式(指定重啟的命令,是一個字元串,預設是 'rs') -
verbose
:是否輸出重啟的詳細信息,值是一個布爾值,true
是列印詳細信息,false
是不列印 -
watch
:這裡指定監視的文件夾或文件,是一個數組,每個參數是目錄或文件) -
ignore
:忽略監視的文件或文件夾,預設忽略的文件有:.git
,node_modules
,bower_components
,.sass-cache
-
delay
:設置延遲時間 -
exec
:執行的命令 -
ext
:指定預設文件的尾碼,參數是一個字元串,每個尾碼之間用空格分隔,預設支持js
coffee
litcoffee
-
script
: 指定監視的文件,這個一般是指定項目入口的 js 文件 env
: 運行環境 development 是開發環境,production 是生產環境,port 是埠號
修改nodemon
命令配置使用--config
選項。
"start": "nodemon --config nodemon.json"
總結
"start": "nodemon --config nodemon.json"
"start": "nodemon"
"start": "nodemon --watch src/ -e js,coffee app.js"
例子
首先創建一個文件:
// index.js console.log('test');
執行命令:
nodemon index.js
在命令行中會出現下麵的信息:
修改文件,終端中輸出的信息如下:
在終端中輸入 rs
會重啟應用:
rs [nodemon] starting `node ./server/index.js` [nodemon]
結合配置參數使用
nodemon可以作為一個模塊module和子進程child process來使用
// index.js const nodemon = require('nodemon'); const path = require('path'); const options = { // 配置文件 script: path.resolve(__dirname, 'src/test.js'), "watch": [ "docs/" ], "ext": "md", "restartable": 're', "verbose": true }; nodemon(options).on('start', function () { // 啟動時的事件 console.log('App has started'); }).on('quit', function () { // 退出時的事件 console.log('App has quit'); process.exit(); }).on('restart', function (files) { // 重啟時的事件 console.log('App restarted due to: ', files); });
執行程式之後的效果如下:
App has started App has started App restarted due to: [ '/Users/negivup/Desktop/test/docs/nodemon.md' ] App has started App restarted due to: [ '/Users/negivup/Desktop/test/docs/nodemon.md' ]
具體使用方法,可參見官網doc