Browsersync结合gulp和nodemon实现express全栈自动刷新

Browsersync能让浏览器实时、快速响应你的文件更改(html、js、css、sass、less等)并自动刷新页面。更重要的是 Browsersync可以同时在PC、平板、手机等设备下进项调试。你的任何一次代码保存,以上的设备都会同时显示你的改动”。

Browsersync可以单独使用,也可以集成到gulp和grunt这样的构建工具中使用,在node.js项目中还能结合gulp-nodemon实现全栈的自动刷新,而在移动端设备上同步调试的功能对移动web开发显然是很有帮助的。

单独使用Browsersync

  1. Browsersync是基于node.js的,所以要先安装node.js。
  2. 全局安装Browsersync, npm install -g browser-sync。
  3. 在你项目的根目录下打开命令行,执行
    browser-sync start --server --files "css/*.css"
    这个命令会启动 BrowserSync并监听特定文件,Browsersync将创建并启动一个本地服务器,然后会自动打开你的默认浏览器后访问http://localhost:3000地址。在命令行窗口中,我们可以看到
  • 上面的External项后面的地址可以用来在手机浏览器上访问页面,这样就能和电脑桌面浏览器同步调试了。而UI项后面的地址则可以用来访问Browsersync的配置页面,里面可以设置一些各个设备和浏览器中事件同步的选项,比如设置页面滚动,点击,表单等事件是否同步等。
  • 上述情况是用于本地没有搭建服务器的情况,如果本地搭建了服务器,比如设置了vhost local.openadmin.com 指向 C:\wamp\www\openadmin\目录,那么需要在控制台敲入下面的命令:
    browser-sync start --proxy local.openadmin.com --files "style/**"
    即可启动服务
  • 在调试之前,我们需要确保测试用的手机和本地开发的机器同处在一个局域网中。

结合gulp使用Browsersync

  1. 在项目根目录下打开命令行窗口,执行npm init,生成package.json文件
  2. 作为项目的开发依赖安装gulp和Browsersync:
    npm install --save-dev gulp npm install --save-dev browser-sync
    然后package.json中就会出现:
"devDependencies": {
  "browser-sync": "^2.18.1",
  "gulp": "^3.9.1"
}
  1. 在项目根目录下新建gulpfile.js,然后在gulpfile.js中定义一个任务,启动Browsersync:
var gulp = require('gulp');
// 调用 .create() 意味着你得到一个唯一的实例并允许您创建多个服务器或代理。
var browserSync = require('browser-sync').create();
// 定义一个任务,任务的名字,该任务所要执行的一些操作
gulp.task('watch', function() {
// 启动Browsersync服务。这将启动一个服务器,代理服务器(proxy)或静态服务器(server)
browserSync.init({
    // 设置监听的文件,以gulpfile.js所在的根目录为起点,如果不在根目录要加上路径,单个文件就用字符串,多个文件就用数组
    files: ["*.html", "css/*.css", "js/*.js"],
    // 启动静态服务器,默认监听3000端口,设置启动时打开的index.html的路径
    server: {
        baseDir: "./"
    },
    // 在不同浏览器上镜像点击、滚动和表单,即所有浏览器都会同步
    ghostMode: {
        clicks: true,
        scroll: true
    },
    // 更改控制台日志前缀
    logPrefix: "learning browser-sync in gulp",
    // 设置监听时打开的浏览器,下面的设置会同时打开chrome, firefox和IE
    browser: ["chrome", "firefox", "iexplore"],
    // 设置服务器监听的端口号
    port: 8080
  });
});

从上面的示例代码中可以看到,在gulpfile.js里可以很方便地配置监听的文件,浏览器同步选项,监听端口等设置。相关配置项在Browsersync的官方文档里有更详细的介绍。

  1. 最后在命令行中执行gulp watch,执行watch任务,就可以启动Browsersync了。这次因为设置了要打开的浏览器为chrome、firefox还有IE,会同时打开三个浏览器。

Browsersync结合nodemon实现node.js项目的全栈刷新

之前一直在自己做一个基于express框架的项目,用到了supervisor这个调试工具,每次服务器端js代码有修改,都会自动重启node.js,但是浏览器并不会自动刷新,我又想到了Browsersync。
要把Browsersync引进来需要用到一个和supervisor类似的工具:nodemon。

相比 supervisor ,nodemon 的优点包括:更轻量级,内存占用更小。使用更加方便,更容易进行扩展等。

在gulp里可以用gulp-nodemon这个插件来实现nodemon的功能,那么我实现全栈刷新的工作就可以分为两步:

  1. 用gulp-nodemon启动node.js项目服务器
  2. 在node.js项目启动后启动Browsersync,并监听相关文件的变化
    可以通过gulp-nodemon的start事件来触发Browsersync的启动,以基于express框架的项目为例,具体的gulpfile.js如下
var gulp = require('gulp');
// 调用 .create() 意味着你得到一个唯一的实例并允许您创建多个服务器或代理。
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只监视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都能监听到。
  • 需要注意的是,如果是修改了服务端的js文件,会先通过nodemon重启应用,这时浏览器不会刷新,要再保存一下修改的文件,Browsersync才会显示出修改后的效果。

总结

现在,前端的自动化和工程化是发展趋势,随着项目的扩大,自动化能极大提高开发体验,Browsersync正是这样一款提升前端开发效率的利器,即使是初学者也应该尽快掌握Browsersync的使用,并应用到自己的项目开发中,帮自己节约时间和精力,以更好更快地完成项目。


参考资料

  1. Browsersync中文网
  2. gulp中文网
  3. gulp-nodemon——npm
  4. 前端实时可视化开发工具体验——慕课网

转载自:

  1. 作者: 种子_fe
    链接:http://www.imooc.com/article/14759
  2. 作者:卡布其诺猫
    链接:http://www.cnblogs.com/kbqncf/p/4206244.html
  3. 动态项目使用browsersync
    链接:http://blog.csdn.net/uikoo9/article/details/72368089?utm_source=itdadao&utm_medium=referral
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容

  • 对网站资源进行优化,并使用不同浏览器测试并不是网站设计过程中最有意思的部分,但是这个过程中的很多重复的任务能够使用...
    懵逼js阅读 1,051评论 0 8
  • 在现在的前端开发中,前后端分离、模块化开发、版本控制、文件合并与压缩、mock数据等等一些原本后端的思想开始...
    Charlot阅读 5,415评论 1 32
  • 参照Gulp for Beginners来学习Gulp基本内容。以下为学习记录笔记。 安装Gulp 首先需要安装N...
    JenniferYe阅读 2,516评论 1 17
  • 前言: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器;她不仅能对网站资源进行优化,而且在开...
    晚晴幽草阅读 3,081评论 0 13
  • gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简单,学...
    依依玖玥阅读 3,144评论 7 55