详解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 csv操作类代码
Dec 14 PHP
PHP性能优化 产生高度优化代码
Jul 22 PHP
mysqli_set_charset和SET NAMES使用抉择及优劣分析
Jan 13 PHP
Symfony页面的基本创建实例详解
Jan 26 PHP
php读取csc文件并输出
May 21 PHP
PHP cURL初始化和执行方法入门级代码
May 28 PHP
使用Huagepage和PGO来提升PHP7的执行性能
Nov 30 PHP
php运行报错Call to undefined function curl_init()的最新解决方法
Nov 20 PHP
PHP AjaxForm提交图片上传并显示图片源码
Nov 29 PHP
PHP中的正则表达式实例详解
Apr 25 PHP
php数据库的增删改查 php与javascript之间的交互
Aug 31 PHP
如何在centos8自定义目录安装php7.3
Nov 28 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
Apache2 httpd.conf 中文版
2006/12/06 PHP
PHP父类调用子类方法的代码例子
2014/04/09 PHP
一个非常完美的读写ini格式的PHP配置类分享
2015/02/12 PHP
javascript 常用代码技巧大收集
2009/02/25 Javascript
jQuery拖动图片删除示例
2013/05/10 Javascript
jquery获取对象的方法足以应付常见的各种类型的对象
2014/05/14 Javascript
推荐一个自己用的封装好的javascript插件
2015/01/29 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
2015/03/23 Javascript
深入理解js数组的sort排序
2016/05/28 Javascript
JS动态给对象添加事件的简单方法
2016/07/19 Javascript
jQuery实现的背景颜色渐变动画效果示例
2017/03/24 jQuery
JavaScript中in和hasOwnProperty区别详解
2017/08/04 Javascript
vue自定义tap指令及tap事件的实现
2018/09/18 Javascript
vue动态删除从数据库倒入列表的某一条方法
2018/09/29 Javascript
vue实现重置表单信息为空的方法
2018/09/29 Javascript
小程序登录态管理的方法示例
2018/11/13 Javascript
浅谈Webpack多页应用HMR卡住问题
2019/04/24 Javascript
python初学之用户登录的实现过程(实例讲解)
2017/12/23 Python
python利用跳板机ssh远程连接redis的方法
2019/02/19 Python
用python wxpy管理微信公众号并利用微信获取自己的开源数据
2019/07/30 Python
python实现超级玛丽游戏
2020/03/18 Python
python map比for循环快在哪
2020/09/21 Python
英格兰橄榄球商店:England Rugby Store
2016/12/17 全球购物
Shein英国:女性时尚网上商店
2019/04/10 全球购物
ECOSUSI官网:女式皮革背包
2019/09/27 全球购物
linux面试题参考答案(8)
2016/04/19 面试题
商场中秋节广播稿
2014/01/17 职场文书
管辖权异议上诉状
2015/05/23 职场文书
爱国主义主题班会
2015/08/14 职场文书
读《瓦尔登湖》有感:每个人都需要一个瓦尔登湖
2019/10/17 职场文书
python 如何在 Matplotlib 中绘制垂直线
2021/04/02 Python
python实现简单的聊天小程序
2021/07/07 Python
nodejs利用readline提示输入内容实例代码
2021/07/15 NodeJs
使用CSS3实现按钮悬停闪烁动态特效代码
2021/08/30 HTML / CSS
详解MongoDB排序时内存大小限制与创建索引的注意事项
2022/05/06 MongoDB
Python如何利用pandas读取csv数据并绘图
2022/07/07 Python