一、簡介
Nodemon是一個非常好用的工具,它可以幫助開發者實現服務的自動重啟。在服務端開發中,開發者經常會去修改文件然后進行調試,每次修改完如果需要人為去重新啟動服務的話,非常浪費精力和時間。Nodemon這個工具正好提供了重啟服務的功能,非常方便。
二、項目
還是采用上篇文章創建的項目為例,如下:
三、修改
1、添加腳本,修改啟動方式,采用npm啟動
//"start": 這個是啟動的字段,可以自己定義,在終端運行時對應即可 //"node src/app.js": 這個是node運行的文件 { "name": "node-demo", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "start":"node src/app.js", "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC" }
2、使用npm啟動服務
//啟動服務 npm start //在終端啟動后的結果輸出如下 > node-demo@1.0.0 start /Users/xiayuanquan/Desktop/開發案例/NodeApp/node-demo > node src/app.js 服務器啟動
四、配置
使用上面的npm現在確實可以啟動服務了。但是,並不能幫助開發者每次在重新修改完服務端文件如app.js文件后重新啟動服務。如果不信,可以試着修改完app.js后再次刷新web,發現web結果不會發生變化。要想使用這個Nodemon的服務重啟功能,需要先安裝Nodemon,然后接着配置項目的package.json文件。添加一個重啟的腳本即可,如下所示:
1、安裝Nodemon
// -D: dev環境 npm install nodemon -D //安裝結果如下: + nodemon@2.0.2 added 106 packages from 53 contributors in 6.892s
2、修改package.json的啟動命令
//"start": 新的啟動腳本 //"start:node": 原啟動腳本 { "name": "node-demo", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "start":"nodemon src/app.js", "start:node":"node src/app.js", "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC" }
2、使用npm啟動服務
xiayuanquan@XYQ ~/Desktop/開發案例/NodeApp/node-demo npm start > node-demo@1.0.0 start /Users/xiayuanquan/Desktop/開發案例/NodeApp/node-demo > nodemon src/app.js [nodemon] 2.0.2 //nodemon的版本 [nodemon] to restart at any time, enter `rs` //輸入rs可以手動重啟,如下所示 [nodemon] watching dir(s): *.* //監測的文件,"."表示所有的文件,開發者可以自定義設置 [nodemon] watching extensions: js,mjs,json [nodemon] starting `node src/app.js` 服務器啟動 rs [nodemon] starting `node src/app.js` 服務器啟動
3、現在手動隨意修改文件,可以發現服務都會立即重啟,如下所示:
4、現在修改app.js中的控制台輸出內容后,在web刷新發生了變化,如下:
//web 服務 //ajax --->api --->web server(node.js) //導入http模塊 const http = require('http'); //創建服務器實例 //req:請求內容 //res:響應內容 const server = http.createServer((req, res)=>{ res.end('hello world, xiayuanquan'); }); //服務器設置監聽 //3000:監聽端口號 //127.0.0.1:監聽主機 //()=>{}:監聽回調 server.listen(3000,'127.0.0.1', ()=>{ console.log('服務器啟動'); });
5、現在的確實現了服務的重啟功能。但是默認配置中,觀察的文件是所有文件,這個對程序運行的性能是有影響的。對於一些無關緊要的文件的修改,不需要服務重啟。我們可以單獨給Nodemon創建一個配置文件,設置需要觀察的文件。如下所示:
//監聽的文件是src文件夾下任何子集下的任何文件 //也可以修改為監聽js文件: "./src/**/*.js"
6、配置完后,在終端手動重啟服務后。開發者再次對非觀測的文件進行修改時,服務就不會重啟了。只有對觀測的文件做修改,服務才會傳重啟。
7、在啟動服務時,可以打開debug模式,瀏覽全部的日志信息,如下所示:
//DEBUG=* : 打開了debug模式 { "name": "node-demo", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "start": "DEBUG=* nodemon src/app.js", "start:node": "node src/app.js", "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "devDependencies": { "nodemon": "^2.0.2" } }
啟動后終端數據如下:
xiayuanquan@XYQ ~/Desktop/開發案例/NodeApp/node-demo npm start > node-demo@1.0.0 start /Users/xiayuanquan/Desktop/開發案例/NodeApp/node-demo > DEBUG=* nodemon src/app.js nodemon bus new listener: reset (0) +0ms nodemon bus new listener: reset (0) +2ms nodemon bus new listener: quit (0) +9ms nodemon bus new listener: quit (0) +0ms nodemon bus new listener: restart (0) +0ms nodemon bus new listener: restart (0) +0ms nodemon bus new listener: boot (0) +0ms nodemon bus new listener: boot (0) +0ms nodemon bus new listener: reset (2) +3ms nodemon bus emit: boot +2ms nodemon bus emit: reset +1ms nodemon resetting watchers +0ms nodemon reset +0ms nodemon config: dirs [ '/Users/xiayuanquan/Desktop/開發案例/NodeApp/node-demo/src' ] +0ms [nodemon] 2.0.2 [nodemon] to restart at any time, enter `rs` nodemon bus new listener: error (0) +62ms nodemon bus new listener: error (0) +0ms [nodemon] watching dir(s): src/**/*.* [nodemon] watching extensions: js,mjs,json [nodemon] starting `node src/app.js` nodemon:run fork sh -c node src/app.js +0ms nodemon bus new listener: exit (0) +9ms nodemon bus new listener: exit (0) +0ms nodemon:run start watch on: ./src/**/*.* +1ms nodemon start watch on: /Users/xiayuanquan/Desktop/開發案例/NodeApp/node-demo/src +70ms nodemon ignored [ '**/.git/**', '**/.nyc_output/**', '**/.sass-cache/**', '**/bower_components/**', '**/coverage/**', '**/node_modules/**', re: /.*.*\/\.git\/.*.*|.*.*\/\.nyc_output\/.*.*|.*.*\/\.sass\-cache\/.*.*|.*.*\/bower_components\/.*.*|.*.*\/coverage\/.*.*|.*.*\/node_modules\/.*.*/ ] +1ms nodemon:watch chokidar watching: /Users/xiayuanquan/Desktop/開發案例/NodeApp/node-demo/src/app.js +0ms nodemon watch is complete +25ms 服務器啟動