前言
項目的空檔期,就在東一頭西一頭的折騰(生命在于折騰嘛)。想使用express跟mongodb做一個小小的管理系統(tǒng),各種準備工作做好了,數(shù)據(jù)庫也跑通了,但是每次修改代碼的時候都要重啟服務(wù),簡直不能忍受。
1.嘗試supervisor
supervisor原本是用于服務(wù)器上Node.js應(yīng)用崩潰的時候,自己重新啟動。當然它也可以監(jiān)控你的項目的js文件變化,進而重啟來方便我們調(diào)試應(yīng)用程序。
安裝:npm install supervisor -g
啟動:supervisor -w routes views ./bin/www,其中-w routes views表示要監(jiān)聽的目錄
supervisor還支持多種參數(shù),列舉如下:
//要監(jiān)控的文件夾或js文件,默認為'.'
-w|--watch <watchItems>
//要忽略監(jiān)控的文件夾或js文件
-i|--ignore <ignoreItems>
//監(jiān)控文件變化的時間間隔(周期),默認為Node.js內(nèi)置的時間
-p|--poll-interval <milliseconds>
//要監(jiān)控的文件擴展名,默認為'node|js'
-e|--extensions <extensions>
//要執(zhí)行的主應(yīng)用程序,默認為'node'
-x|--exec <executable>
//開啟debug模式(用--debug flag來啟動node)
--debug
//安靜模式,不顯示DEBUG信息
-q|--quiet
雖然能做到監(jiān)聽文件修改,但是每次都要手動刷新瀏覽器才能看到效果。
2.使用gulp+browsersync+nodemon
安裝:npm install --save-dev gulp
npm install --save-dev browser-sync
npm install --save-dev gulp-nodemon
添加gilpfile文件:
var browserSync = require('browser-sync');
var reload = browserSync.reload;
var nodemon = require('gulp-nodemon');
var gulp = require('gulp');
var less = require('gulp-less');
//express啟動項
gulp.task("node", function() {
nodemon({
script: './bin/www',
ext: 'js html',
env: {
'NODE_ENV': 'development'
}
})
});
// 編譯less
// 在命令行輸入 gulp less 啟動此任務(wù)
gulp.task('less', function () {
// 1. 找到 less 文件
gulp.src('public/less/**/**.less')
// 2. 編譯為css
.pipe(less())
// 3. 另存文件
.pipe(gulp.dest('public/stylesheets/css'))
});
gulp.task('auto', function () {
// 監(jiān)聽文件修改,當文件被修改則執(zhí)行 less任務(wù)
gulp.watch('public/less/**.less', ['less'])
});
gulp.task('start', ["node","less","auto"], function() {
//所需要監(jiān)聽的文件
var files = [
"routes/**",
'views/**/*.html',
'views/**/*.ejs',
'views/**/*.jade',
'views/**/*.pug',
'public/**/*.*'
];
browserSync.init(files, {
proxy: 'http://192.168.49.1:3000', //所要代理的地址,端口要與bin/www中的端口一致
browser: 'chrome',
notify: false,
port: 3001 //代理地址的端口號
});
gulp.watch(files).on("change", reload);
});
運行:gulp start啟動服務(wù)

服務(wù)啟動日志.jpg
展示一張實際效果圖

ok,可以愉快的開發(fā)了。不過服務(wù)端文件修改后要按兩次
ctrl+s才會生效。具體什么情況沒去深究。