Browsersync結(jié)合gulp和nodemon實(shí)現(xiàn)express全棧自動(dòng)刷新

Browsersync能讓瀏覽器實(shí)時(shí)砸西、快速響應(yīng)你的文件更改(html叶眉、js、css芹枷、sass衅疙、less等)并自動(dòng)刷新頁面。更重要的是 Browsersync可以同時(shí)在PC鸳慈、平板饱溢、手機(jī)等設(shè)備下進(jìn)項(xiàng)調(diào)試。你的任何一次代碼保存走芋,以上的設(shè)備都會(huì)同時(shí)顯示你的改動(dòng)”绩郎。

Browsersync可以單獨(dú)使用,也可以集成到gulp和grunt這樣的構(gòu)建工具中使用翁逞,在node.js項(xiàng)目中還能結(jié)合gulp-nodemon實(shí)現(xiàn)全棧的自動(dòng)刷新肋杖,而在移動(dòng)端設(shè)備上同步調(diào)試的功能對(duì)移動(dòng)web開發(fā)顯然是很有幫助的。

單獨(dú)使用Browsersync

  1. Browsersync是基于node.js的挖函,所以要先安裝node.js状植。
  2. 全局安裝Browsersync, npm install -g browser-sync怨喘。
  3. 在你項(xiàng)目的根目錄下打開命令行津畸,執(zhí)行
    browser-sync start --server --files "css/*.css"
    這個(gè)命令會(huì)啟動(dòng) BrowserSync并監(jiān)聽特定文件,Browsersync將創(chuàng)建并啟動(dòng)一個(gè)本地服務(wù)器必怜,然后會(huì)自動(dòng)打開你的默認(rèn)瀏覽器后訪問http://localhost:3000地址肉拓。在命令行窗口中,我們可以看到
  • 上面的External項(xiàng)后面的地址可以用來在手機(jī)瀏覽器上訪問頁面梳庆,這樣就能和電腦桌面瀏覽器同步調(diào)試了暖途。而UI項(xiàng)后面的地址則可以用來訪問Browsersync的配置頁面卑惜,里面可以設(shè)置一些各個(gè)設(shè)備和瀏覽器中事件同步的選項(xiàng),比如設(shè)置頁面滾動(dòng)丧肴,點(diǎn)擊残揉,表單等事件是否同步等。
  • 上述情況是用于本地沒有搭建服務(wù)器的情況芋浮,如果本地搭建了服務(wù)器抱环,比如設(shè)置了vhost local.openadmin.com 指向 C:\wamp\www\openadmin\目錄,那么需要在控制臺(tái)敲入下面的命令:
    browser-sync start --proxy local.openadmin.com --files "style/**"
    即可啟動(dòng)服務(wù)
  • 在調(diào)試之前纸巷,我們需要確保測試用的手機(jī)和本地開發(fā)的機(jī)器同處在一個(gè)局域網(wǎng)中镇草。

結(jié)合gulp使用Browsersync

  1. 在項(xiàng)目根目錄下打開命令行窗口,執(zhí)行npm init瘤旨,生成package.json文件
  2. 作為項(xiàng)目的開發(fā)依賴安裝gulp和Browsersync:
    npm install --save-dev gulp npm install --save-dev browser-sync
    然后package.json中就會(huì)出現(xiàn):
"devDependencies": {
  "browser-sync": "^2.18.1",
  "gulp": "^3.9.1"
}
  1. 在項(xiàng)目根目錄下新建gulpfile.js,然后在gulpfile.js中定義一個(gè)任務(wù)梯啤,啟動(dòng)Browsersync:
var gulp = require('gulp');
// 調(diào)用 .create() 意味著你得到一個(gè)唯一的實(shí)例并允許您創(chuàng)建多個(gè)服務(wù)器或代理。
var browserSync = require('browser-sync').create();
// 定義一個(gè)任務(wù)存哲,任務(wù)的名字因宇,該任務(wù)所要執(zhí)行的一些操作
gulp.task('watch', function() {
// 啟動(dòng)Browsersync服務(wù)。這將啟動(dòng)一個(gè)服務(wù)器察滑,代理服務(wù)器(proxy)或靜態(tài)服務(wù)器(server)
browserSync.init({
    // 設(shè)置監(jiān)聽的文件,以gulpfile.js所在的根目錄為起點(diǎn)修肠,如果不在根目錄要加上路徑贺辰,單個(gè)文件就用字符串,多個(gè)文件就用數(shù)組
    files: ["*.html", "css/*.css", "js/*.js"],
    // 啟動(dòng)靜態(tài)服務(wù)器嵌施,默認(rèn)監(jiān)聽3000端口饲化,設(shè)置啟動(dòng)時(shí)打開的index.html的路徑
    server: {
        baseDir: "./"
    },
    // 在不同瀏覽器上鏡像點(diǎn)擊、滾動(dòng)和表單吗伤,即所有瀏覽器都會(huì)同步
    ghostMode: {
        clicks: true,
        scroll: true
    },
    // 更改控制臺(tái)日志前綴
    logPrefix: "learning browser-sync in gulp",
    // 設(shè)置監(jiān)聽時(shí)打開的瀏覽器吃靠,下面的設(shè)置會(huì)同時(shí)打開chrome, firefox和IE
    browser: ["chrome", "firefox", "iexplore"],
    // 設(shè)置服務(wù)器監(jiān)聽的端口號(hào)
    port: 8080
  });
});

從上面的示例代碼中可以看到,在gulpfile.js里可以很方便地配置監(jiān)聽的文件足淆,瀏覽器同步選項(xiàng)撩笆,監(jiān)聽端口等設(shè)置。相關(guān)配置項(xiàng)在Browsersync的官方文檔里有更詳細(xì)的介紹缸浦。

  1. 最后在命令行中執(zhí)行g(shù)ulp watch,執(zhí)行watch任務(wù)氮兵,就可以啟動(dòng)Browsersync了裂逐。這次因?yàn)樵O(shè)置了要打開的瀏覽器為chrome、firefox還有IE泣栈,會(huì)同時(shí)打開三個(gè)瀏覽器卜高。

Browsersync結(jié)合nodemon實(shí)現(xiàn)node.js項(xiàng)目的全棧刷新

之前一直在自己做一個(gè)基于express框架的項(xiàng)目弥姻,用到了supervisor這個(gè)調(diào)試工具,每次服務(wù)器端js代碼有修改掺涛,都會(huì)自動(dòng)重啟node.js庭敦,但是瀏覽器并不會(huì)自動(dòng)刷新,我又想到了Browsersync薪缆。
要把Browsersync引進(jìn)來需要用到一個(gè)和supervisor類似的工具:nodemon秧廉。

相比 supervisor ,nodemon 的優(yōu)點(diǎn)包括:更輕量級(jí)拣帽,內(nèi)存占用更小疼电。使用更加方便,更容易進(jìn)行擴(kuò)展等减拭。

在gulp里可以用gulp-nodemon這個(gè)插件來實(shí)現(xiàn)nodemon的功能蔽豺,那么我實(shí)現(xiàn)全棧刷新的工作就可以分為兩步:

  1. 用gulp-nodemon啟動(dòng)node.js項(xiàng)目服務(wù)器
  2. 在node.js項(xiàng)目啟動(dòng)后啟動(dòng)Browsersync,并監(jiān)聽相關(guān)文件的變化
    可以通過gulp-nodemon的start事件來觸發(fā)Browsersync的啟動(dòng)拧粪,以基于express框架的項(xiàng)目為例修陡,具體的gulpfile.js如下
var gulp = require('gulp');
// 調(diào)用 .create() 意味著你得到一個(gè)唯一的實(shí)例并允許您創(chuàng)建多個(gè)服務(wù)器或代理。
var browserSync = require('browser-sync').create();
// 這里reload不加括號(hào)可霎,只引用不調(diào)用
// var reload = browserSync.reload;
var nodemon = require('gulp-nodemon');
gulp.task('server', function() {
    nodemon({
        script: 'app.js',
        // 忽略部分對(duì)程序運(yùn)行無影響的文件的改動(dòng)魄鸦,nodemon只監(jiān)視js文件,可用ext項(xiàng)來擴(kuò)展別的文件類型
        ignore: ["gulpfile.js", "node_modules/", "public/**/*.*"],
        env: {
            'NODE_ENV': 'development'
        }
    }).on('start', function() {
        browserSync.init({
            proxy: 'http://localhost:3000',
            files: ["public/**/*.*", "views/**", "routes/**"],
            port:8080
        }, function() {
            console.log("browser refreshed.");
        });
    });
});
  • 這里Browsersync會(huì)用http://localhost:8080來代理nodemon啟動(dòng)的主機(jī)地址啥纸,這樣号杏,無論是views目錄下的視圖模板文件,還是public目錄下的前端css和js文件斯棒,亦或是routes目錄下的路由控制js文件盾致,只要有改動(dòng),Browsersync都能監(jiān)聽到荣暮。
  • 需要注意的是庭惜,如果是修改了服務(wù)端的js文件,會(huì)先通過nodemon重啟應(yīng)用穗酥,這時(shí)瀏覽器不會(huì)刷新护赊,要再保存一下修改的文件,Browsersync才會(huì)顯示出修改后的效果砾跃。

總結(jié)

現(xiàn)在骏啰,前端的自動(dòng)化和工程化是發(fā)展趨勢,隨著項(xiàng)目的擴(kuò)大抽高,自動(dòng)化能極大提高開發(fā)體驗(yàn)判耕,Browsersync正是這樣一款提升前端開發(fā)效率的利器,即使是初學(xué)者也應(yīng)該盡快掌握Browsersync的使用翘骂,并應(yīng)用到自己的項(xiàng)目開發(fā)中壁熄,幫自己節(jié)約時(shí)間和精力帚豪,以更好更快地完成項(xiàng)目。


參考資料

  1. Browsersync中文網(wǎng)
  2. gulp中文網(wǎng)
  3. gulp-nodemon——npm
  4. 前端實(shí)時(shí)可視化開發(fā)工具體驗(yàn)——慕課網(wǎng)

轉(zhuǎn)載自:

  1. 作者: 種子_fe
    鏈接:http://www.imooc.com/article/14759
  2. 作者:卡布其諾貓
    鏈接:http://www.cnblogs.com/kbqncf/p/4206244.html
  3. 動(dòng)態(tài)項(xiàng)目使用browsersync
    鏈接:http://blog.csdn.net/uikoo9/article/details/72368089?utm_source=itdadao&utm_medium=referral
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末草丧,一起剝皮案震驚了整個(gè)濱河市狸臣,隨后出現(xiàn)的幾起案子禾嫉,更是在濱河造成了極大的恐慌亥揖,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仁锯,死亡現(xiàn)場離奇詭異仙蚜,居然都是意外死亡此洲,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門委粉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呜师,“玉大人,你說我怎么就攤上這事贾节≈梗” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵栗涂,是天一觀的道長知牌。 經(jīng)常有香客問我,道長斤程,這世上最難降的妖魔是什么角寸? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮忿墅,結(jié)果婚禮上扁藕,老公的妹妹穿的比我還像新娘。我一直安慰自己疚脐,他們只是感情好亿柑,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著棍弄,像睡著了一般望薄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上呼畸,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天痕支,我揣著相機(jī)與錄音,去河邊找鬼蛮原。 笑死采转,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播故慈,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼框全!你這毒婦竟也來了察绷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤津辩,失蹤者是張志新(化名)和其女友劉穎拆撼,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喘沿,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡闸度,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蚜印。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片莺禁。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖窄赋,靈堂內(nèi)的尸體忽然破棺而出哟冬,到底是詐尸還是另有隱情,我是刑警寧澤忆绰,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布浩峡,位于F島的核電站,受9級(jí)特大地震影響错敢,放射性物質(zhì)發(fā)生泄漏翰灾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一稚茅、第九天 我趴在偏房一處隱蔽的房頂上張望纸淮。 院中可真熱鬧,春花似錦峰锁、人聲如沸萎馅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽糜芳。三九已至,卻和暖如春魄衅,著一層夾襖步出監(jiān)牢的瞬間峭竣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國打工晃虫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留皆撩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像扛吞,于是被迫代替她去往敵國和親呻惕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 對(duì)網(wǎng)站資源進(jìn)行優(yōu)化滥比,并使用不同瀏覽器測試并不是網(wǎng)站設(shè)計(jì)過程中最有意思的部分亚脆,但是這個(gè)過程中的很多重復(fù)的任務(wù)能夠使用...
    懵逼js閱讀 1,073評(píng)論 0 8
  • 在現(xiàn)在的前端開發(fā)中,前后端分離盲泛、模塊化開發(fā)濒持、版本控制、文件合并與壓縮寺滚、mock數(shù)據(jù)等等一些原本后端的思想開始...
    Charlot閱讀 5,448評(píng)論 1 32
  • 參照Gulp for Beginners來學(xué)習(xí)Gulp基本內(nèi)容柑营。以下為學(xué)習(xí)記錄筆記。 安裝Gulp 首先需要安裝N...
    JenniferYe閱讀 2,542評(píng)論 1 17
  • 前言: gulp是前端開發(fā)過程中對(duì)代碼進(jìn)行構(gòu)建的工具村视,是自動(dòng)化項(xiàng)目的構(gòu)建利器官套;她不僅能對(duì)網(wǎng)站資源進(jìn)行優(yōu)化,而且在開...
    晚晴幽草閱讀 3,101評(píng)論 0 13
  • gulpjs是一個(gè)前端構(gòu)建工具蓖议,與gruntjs相比虏杰,gulpjs無需寫一大堆繁雜的配置參數(shù),API也非常簡單勒虾,學(xué)...
    依依玖玥閱讀 3,157評(píng)論 7 55