详解Grunt插件之LiveReload实现页面自动刷新(两种方案)


Posted in PHP onJuly 31, 2015

方案一:grunt-livereload + Chrome Plug-in

优点:安装、配置简单方便。
缺点:需要配合指定的浏览器插件(Firefox也有相关插件,IE么你懂的)。

1. 需要安装2个插接件:grunt-contrib-watch、connect-livereload

执行命令:

npm install --save-dev grunt-contrib-watch connect-livereload

2. 安装浏览器插件:Chrome LiveReload

3. 配置一个Web服务器(IIS/Apache),LiveReload需要在本地服务器环境下运行(对file:///文件路径支持并不是很好)。

4. 修改Gruntfile.js文件:

module.exports = function(grunt) {
 // 项目配置(任务配置)
 grunt.initConfig({
  pkg: grunt.file.readJSON('package.json'),
  watch: {
   client: {
    files: ['*.html', 'css/*', 'js/*', 'images/**/*'],
    options: {
     livereload: true
    }
   }
  }
 });
 // 加载插件
 grunt.loadNpmTasks('grunt-contrib-watch');
 // 自定义任务
 grunt.registerTask('live', ['watch']);
};

5. 执行:grunt live

看到如下提示,说明已经开始监听任务:

Running "watch" task

Waiting...

6. 打开我们的页面,例如:http://localhost/

7. 再点击Chrome LiveReload插件的ICON,此时ICON圆圈中心的小圆点变成实心的,说明插件执行成功。此时你改下网站文件看看,是不是实时更新了?

方案二:grunt-contrib-watch + grunt-contrib-connect + grunt-livereload

优点:自动搭建静态文件服务器,不需在自己电脑上搭建Web服务器。

 不需要浏览器插件的支持(不现定于某个浏览器)。

不需要给网页手动添加livereload.js。
缺点:对于刚接触的人,配置略显复杂。

1. 安装我们所需要的3个插件:grunt-contrib-watch、grunt-contrib-connect、connect-livereload

执行命令:

npm install --save-dev grunt-contrib-watch grunt-contrib-connect connect-livereload

2. 修改Gruntfile.js文件:

module.exports = function(grunt) {
 // LiveReload的默认端口号,你也可以改成你想要的端口号
 var lrPort = 35729;
 // 使用connect-livereload模块,生成一个与LiveReload脚本
 // <script src="http://127.0.0.1:35729/livereload.js?snipver=1" type="text/javascript"></script>
 var lrSnippet = require('connect-livereload')({ port: lrPort });
 // 使用 middleware(中间件),就必须关闭 LiveReload 的浏览器插件
 var lrMiddleware = function(connect, options) {
  return [
   // 把脚本,注入到静态文件中
   lrSnippet,
   // 静态文件服务器的路径
   connect.static(options.base[0]),
   // 启用目录浏览(相当于IIS中的目录浏览)
   connect.directory(options.base[0])
  ];
 };
 // 项目配置(任务配置)
 grunt.initConfig({
  // 读取我们的项目配置并存储到pkg属性中
  pkg: grunt.file.readJSON('package.json'),
  // 通过connect任务,创建一个静态服务器
  connect: {
   options: {
    // 服务器端口号
    port: 8000,
    // 服务器地址(可以使用主机名localhost,也能使用IP)
    hostname: 'localhost',
    // 物理路径(默认为. 即根目录) 注:使用'.'或'..'为路径的时,可能会返回403 Forbidden. 此时将该值改为相对路径 如:/grunt/reloard。
    base: '.'
   },
   livereload: {
    options: {
     // 通过LiveReload脚本,让页面重新加载。
     middleware: lrMiddleware
    }
   }
  },
  // 通过watch任务,来监听文件是否有更改
  watch: {
   client: {
    // 我们不需要配置额外的任务,watch任务已经内建LiveReload浏览器刷新的代码片段。
    options: {
     livereload: lrPort
    },
    // '**' 表示包含所有的子目录
    // '*' 表示包含所有的文件
    files: ['*.html', 'css/*', 'js/*', 'images/**/*']
   }
  }
 }); // grunt.initConfig配置完毕
 // 加载插件
 grunt.loadNpmTasks('grunt-contrib-connect');
 grunt.loadNpmTasks('grunt-contrib-watch');
 // 自定义任务
 grunt.registerTask('live', ['connect', 'watch']);
};

5. 执行:grunt live

看到如下提示,说明Web服务器搭建完成,并且开始监听任务:

Running "connect:livereload" (connect) task

Started connect web server on 127.0.0.1:8000.
Running "watch" task

Waiting...

注:执行该命令前,如果你有安装过LiveReload的浏览器插件,必须关闭。

6. 打开我们的页面,例如:http://localhost:8000/http://127.0.0.1:8000/
注:这里所打开的本地服务器地址,是我们刚才通过connect所搭建的静态文件服务器地址,而不是之前你用IIS或Apache自己搭建Web服务器地址。

以上就是本文详解Grunt插件之LiveReload实现页面自动刷新(两种方案),希望大家喜欢。

PHP 相关文章推荐
PHP的autoload机制的实现解析
Sep 15 PHP
解析PHP处理换行符的问题 \r\n
Jun 13 PHP
Yii结合CKEditor实现图片上传功能
Jun 13 PHP
培养自己的php编码规范
Sep 28 PHP
php上传大文件设置方法
Apr 14 PHP
php+mysql查询实现无限下级分类树输出示例
Oct 03 PHP
PHP中函数gzuncompress无法使用的解决方法
Mar 02 PHP
PHP数据分析引擎计算余弦相似度算法示例
Aug 08 PHP
详细解读php的命名空间(一)
Feb 21 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
Jun 13 PHP
在TP5数据库中四个字段实现无限分类的示例
Oct 18 PHP
ThinkPHP5框架中使用JWT的方法示例
Jun 03 PHP
PHP中filter函数校验数据的方法详解
Jul 31 #PHP
PHP代码实现爬虫记录――超管用
Jul 31 #PHP
PHP 前加at符合@的作用解析
Jul 31 #PHP
PHP查看当前变量类型的方法
Jul 31 #PHP
如何把php5.3版本升级到php5.4或者php5.5
Jul 31 #PHP
PHP内核探索:哈希表碰撞攻击原理
Jul 31 #PHP
如何使用纯PHP实现定时器任务(Timer)
Jul 31 #PHP
You might like
ThinkPHP调试模式与日志记录概述
2014/08/22 PHP
PHP文件读写操作相关函数总结
2014/11/18 PHP
浅析php适配器模式(Adapter)
2014/11/25 PHP
PHP底层运行机制与工作原理详解
2020/07/31 PHP
javascript游戏开发之《三国志曹操传》零部件开发(一)让静态人物动起来
2013/01/23 Javascript
9行javascript代码获取QQ群成员具体实现
2013/10/16 Javascript
使用javascript实现json数据以csv格式下载
2015/01/09 Javascript
js获取对象、数组的实际长度,元素实际个数的实现代码
2016/06/08 Javascript
jQuery悬停文字提示框插件jquery.tooltipster.js用法示例【附demo源码下载】
2016/07/19 Javascript
AngularJS ng-blur 指令详解及简单实例
2016/07/30 Javascript
关于Jquery中的事件绑定总结
2016/10/26 Javascript
javascript+HTML5 canvas绘制时钟功能示例
2019/05/15 Javascript
vue项目,代码提交至码云,iconfont的用法说明
2020/07/30 Javascript
js实现数字跳动到指定数字
2020/08/25 Javascript
js中复选框的取值及赋值示例详解
2020/10/18 Javascript
在HTML中使用JavaScript的两种方法
2020/12/24 Javascript
[01:07:13]TNC vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python k-近邻算法实例分享
2014/06/11 Python
Python代码调试的几种方法总结
2015/04/15 Python
Python的collections模块中namedtuple结构使用示例
2016/07/07 Python
python中join()方法介绍
2018/10/11 Python
python、PyTorch图像读取与numpy转换实例
2020/01/13 Python
Python实现文件压缩和解压的示例代码
2020/08/12 Python
python判断字符串以什么结尾的实例方法
2020/09/18 Python
Python字典实现伪切片功能
2020/10/28 Python
Tod’s英国官方网站:意大利奢华手工制作手袋和鞋履
2019/03/15 全球购物
网络工程师的自我评价
2013/10/02 职场文书
手机业务员岗位职责
2013/12/13 职场文书
素食餐饮项目创业计划书
2014/02/02 职场文书
实习评语大全
2014/04/26 职场文书
医学专业毕业生求职信
2014/06/20 职场文书
文明礼貌主题班会
2015/08/14 职场文书
2016党员干部政治学习心得体会
2016/01/23 职场文书
毕业季聚会祝酒词!
2019/07/04 职场文书
用基于python的appium爬取b站直播消费记录
2021/04/17 Python
一篇文章弄懂Python关键字、标识符和变量
2021/07/15 Python