Browsersync結合gulp和nodemon實現(xiàn)express全棧自動刷新

Browsersync能讓瀏覽器實時、快速響應你的文件更改(html、js、css、sass、less等)并自動刷新頁面。更重要的是 Browsersync可以同時在PC、平板、手機等設備下進項調試。你的任何一次代碼保存,以上的設備都會同時顯示你的改動”。

Browsersync可以單獨使用,也可以集成到gulp和grunt這樣的構建工具中使用,在node.js項目中還能結合gulp-nodemon實現(xiàn)全棧的自動刷新,而在移動端設備上同步調試的功能對移動web開發(fā)顯然是很有幫助的。

單獨使用Browsersync

  1. Browsersync是基于node.js的,所以要先安裝node.js。
  2. 全局安裝Browsersync, npm install -g browser-sync。
  3. 在你項目的根目錄下打開命令行,執(zhí)行
    browser-sync start --server --files "css/*.css"
    這個命令會啟動 BrowserSync并監(jiān)聽特定文件,Browsersync將創(chuàng)建并啟動一個本地服務器,然后會自動打開你的默認瀏覽器后訪問http://localhost:3000地址。在命令行窗口中,我們可以看到
  • 上面的External項后面的地址可以用來在手機瀏覽器上訪問頁面,這樣就能和電腦桌面瀏覽器同步調試了。而UI項后面的地址則可以用來訪問Browsersync的配置頁面,里面可以設置一些各個設備和瀏覽器中事件同步的選項,比如設置頁面滾動,點擊,表單等事件是否同步等。
  • 上述情況是用于本地沒有搭建服務器的情況,如果本地搭建了服務器,比如設置了vhost local.openadmin.com 指向 C:\wamp\www\openadmin\目錄,那么需要在控制臺敲入下面的命令:
    browser-sync start --proxy local.openadmin.com --files "style/**"
    即可啟動服務
  • 在調試之前,我們需要確保測試用的手機和本地開發(fā)的機器同處在一個局域網中。

結合gulp使用Browsersync

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

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

  1. 最后在命令行中執(zhí)行gulp watch,執(zhí)行watch任務,就可以啟動Browsersync了。這次因為設置了要打開的瀏覽器為chrome、firefox還有IE,會同時打開三個瀏覽器。

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

之前一直在自己做一個基于express框架的項目,用到了supervisor這個調試工具,每次服務器端js代碼有修改,都會自動重啟node.js,但是瀏覽器并不會自動刷新,我又想到了Browsersync。
要把Browsersync引進來需要用到一個和supervisor類似的工具:nodemon。

相比 supervisor ,nodemon 的優(yōu)點包括:更輕量級,內存占用更小。使用更加方便,更容易進行擴展等。

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

  1. 用gulp-nodemon啟動node.js項目服務器
  2. 在node.js項目啟動后啟動Browsersync,并監(jiān)聽相關文件的變化
    可以通過gulp-nodemon的start事件來觸發(fā)Browsersync的啟動,以基于express框架的項目為例,具體的gulpfile.js如下
var gulp = require('gulp');
// 調用 .create() 意味著你得到一個唯一的實例并允許您創(chuàng)建多個服務器或代理。
var browserSync = require('browser-sync').create();
// 這里reload不加括號,只引用不調用
// var reload = browserSync.reload;
var nodemon = require('gulp-nodemon');
gulp.task('server', function() {
    nodemon({
        script: 'app.js',
        // 忽略部分對程序運行無影響的文件的改動,nodemon只監(jiān)視js文件,可用ext項來擴展別的文件類型
        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會用http://localhost:8080來代理nodemon啟動的主機地址,這樣,無論是views目錄下的視圖模板文件,還是public目錄下的前端css和js文件,亦或是routes目錄下的路由控制js文件,只要有改動,Browsersync都能監(jiān)聽到。
  • 需要注意的是,如果是修改了服務端的js文件,會先通過nodemon重啟應用,這時瀏覽器不會刷新,要再保存一下修改的文件,Browsersync才會顯示出修改后的效果。

總結

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


參考資料

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

轉載自:

  1. 作者: 種子_fe
    鏈接:http://www.imooc.com/article/14759
  2. 作者:卡布其諾貓
    鏈接:http://www.cnblogs.com/kbqncf/p/4206244.html
  3. 動態(tài)項目使用browsersync
    鏈接:http://blog.csdn.net/uikoo9/article/details/72368089?utm_source=itdadao&utm_medium=referral
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 對網站資源進行優(yōu)化,并使用不同瀏覽器測試并不是網站設計過程中最有意思的部分,但是這個過程中的很多重復的任務能夠使用...
    懵逼js閱讀 1,160評論 0 8
  • 在現(xiàn)在的前端開發(fā)中,前后端分離、模塊化開發(fā)、版本控制、文件合并與壓縮、mock數(shù)據等等一些原本后端的思想開始...
    Charlot閱讀 5,653評論 1 32
  • 參照Gulp for Beginners來學習Gulp基本內容。以下為學習記錄筆記。 安裝Gulp 首先需要安裝N...
    JenniferYe閱讀 2,660評論 1 17
  • 前言: gulp是前端開發(fā)過程中對代碼進行構建的工具,是自動化項目的構建利器;她不僅能對網站資源進行優(yōu)化,而且在開...
    晚晴幽草閱讀 3,251評論 0 13
  • gulpjs是一個前端構建工具,與gruntjs相比,gulpjs無需寫一大堆繁雜的配置參數(shù),API也非常簡單,學...
    依依玖玥閱讀 3,299評論 7 55

友情鏈接更多精彩內容