Grunt 之 watch 和 livereload

现在 watch 中已经集成了 livereload ,所以把它们放在一起说明。

watch 可以监控特定的文件,在添加文件、修改文件、或者删除文件的时候自动执行自定义的任务,比如 livereload 等等。

1. 安装

项目定义在 GitHub 上,地址:https://github.com/gruntjs/grunt-contrib-watch

可以通过 NPM 直接进行安装

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

安装之后,需要在 Gruntfile.js 中添加任务的注册。

grunt.loadNpmTasks(‘grunt-contrib-watch‘);

通过 grunt watch 运行 watch 任务。

2. 配置 watch

与 connect 类似,在 watch 下面定义自己的子任务,下面的示例将会监控 src 目录下的任意 *.html 文件,在文件被修改之后,输出被修改的文件名。

这里通过 watch 的事件进行处理。

‘use strict‘;  

module.exports = function (grunt) {  

    // Project configuration.
    grunt.initConfig({  

        watch:{
            start:{
                files: [‘src/*.html‘]
            }
        }
    });

    grunt.event.on(‘watch‘, function(action, filepath, target) {
          grunt.log.writeln(target + ‘: ‘ + filepath + ‘ has ‘ + action);
    });
    grunt.loadNpmTasks(‘grunt-contrib-watch‘);
}

我们启动 watch 任务,注意这个任务会持续监控。

PS C:\study\grunt> grunt watch
Running "watch" task
Waiting...
start: src\index.html has changed
>> File "src\index.html" changed.
Completed in 0.001s at Sun Sep 06 2015 14:52:52 GMT+0800 (China Standard Time) - Waiting...

这里我们使用了 files 参数,这个参数可以为一个路径字符串或者一个字符串的数组,作为监控的目标。路径的写法可以参考:Grunt
之通配符

多数情况下,我们希望在文件发生变化之后,直接执行特定的任务,比如在修改了 *.js 的脚本文件之后,自动进行文件检查。这可以通过 tasks 来直接声明。

这里的 jshint 是我们后面会讲到的一个 javascript 语法检查库,现在还不能用呀。

watch: {
  scripts: {
    files: [‘**/*.js‘],
    tasks: [‘jshint‘]
  },
},

这里我们自定义一个名为 hello 的任务。

tasks 是一个任务名称的字符串或者,一个任务名称的字符串数组,作为我们执行的任务。

‘use strict‘;  

module.exports = function (grunt) {  

    // Project configuration.
    grunt.initConfig({  

        watch:{
            start:{
                files: [‘src/*.html‘],
                tasks: [‘hello‘]
            }
        }
    });

    grunt.registerTask(‘hello‘, ‘Hello, world task description.‘, function() {
            grunt.log.writeln(‘Hello, world.‘);
    });

    grunt.loadNpmTasks(‘grunt-contrib-watch‘);
}

3. 高级选项

可以通过 options 配置更加详细的设置。

1. options.spawn

boolean 类型,默认 true。默认会创建一个新的子进程来执行触发的任务。通过设置为 false,可以使得触发的任务可以共享进程上下文,并且提高速度。但是,这会导致监控任务容易崩溃,所以,请尽量使用这个特性,在新的子进程中执行任务。

watch: {
  scripts: {
    files: [‘**/*.js‘],
    tasks: [‘jshint‘],
    options: {
      spawn: false,
    },
  },
},

2. options.interrupt

boolean 类型,默认为 false。还是和进程相关。

在文件发生修改的时候,会生成子进程来执行任务,默认的行为是对于每个目标来说,在上一个处理完成之后,仅仅生成一个新的子进程来执行任务。设置 interrupt 为 true,将会导致中止上一个进程,生成一个新进程来处理最后的变更。

watch: {
  scripts: {
    files: ‘**/*.js‘,
    tasks: [‘jshint‘],
    options: {
      interrupt: true,
    },
  },
},

3. options.debounceDelay

这是整数类型的参数,如果同样的文件或者路径被修改,需要等待多长时间才触发事件。默认 500 毫秒。

watch: {
  scripts: {
    files: ‘**/*.js‘,
    tasks: [‘jshint‘],
    options: {
      debounceDelay: 250,
    },
  },
},

4. options.event

字符串或者数组,默认为 ‘all‘

指定监控目标的特定事件类型,可以为 ‘all‘, ‘changed‘, ‘added‘ 和 ‘deleted‘.

watch: {
  scripts: {
    files: ‘**/*.js‘,
    tasks: [‘generateFileManifest‘],
    options: {
      event: [‘added‘, ‘deleted‘],
    },
  },
},

5. options.reload

boolean 类型参数,默认为 false。

默认情况下,如果 Gruntfile.js 文件被监控,在这个文件被修改之后,会导致监控任务重新启动。并且重新加载 Gruntfile.js。

如果 reload 设置为 true,任何被监控文件的修改都会导致监控任务重新启动。除非你的 Gruntfile.js 依赖于其它文件,否则不使用这个参数。

watch: {
  configFiles: {
    files: [ ‘Gruntfile.js‘, ‘config/*.js‘ ],
    options: {
      reload: true
    }
  }
}

6. options.forever

boolean 类型参数,默认为 true。

这个整个任务级别的参数,不能在单个目标上配置。默认情况下,监控任务会处理 grunt.fatal 和 grunt.warn ,防止导致的退出监控问题。如果你不希望监控任务覆盖 grunt.fatal 和 grunt.warn ,可以将 forever 设置为 false。

options.atBegin

boolean 类型,默认为 false。

在监控任务启动的时候,自动触发对应的任务。

7. options.cwd

字符串或者对象类型,默认为 process.cwd()

设置当前的工作目录,默认为 process.cwd(),可以设置为字符串的目录来定义监控和产生的子任务的目录,或者一个对象来描述各自独立的路径。

 options: {
    cwd: {
        files: ‘match/files/from/here‘,
        spawn: ‘but/spawn/files/from/here‘
    }
}

4. livereload

这就是配合 connect 的 livereload 了。我们单独拿出来说明。

它是 options 的一个属性,类型为 boolean, 数值,或者配置对象。默认为 false

设置为 true 等价设置为 35729.

实际上,会启用一个支持重新加载的服务器,这个服务器工作在上述端口号上,通过这个服务器可以获取一个脚本,当文件被修改之后,通过这个脚本通知前端浏览器自动重新加载内容。

例如:

watch: {
  css: {
    files: ‘**/*.sass‘,
    tasks: [‘sass‘],
    options: {
      livereload: true,
    },
  },
},

启动之后,实际上在指定的端口上创建了一个服务器,如果访问的话,可以看到返回的信息。

访问:http://localhost:35729/

返回的内容

{"tinylr":"Welcome","version":"0.0.5"}

需要的话,还可以工作在 https 上,那就需要通过 key 和 cert 进行配置了。

watch: {
  css: {
    files: ‘**/*.sass‘,
    tasks: [‘sass‘],
    options: {
      livereload: {
        port: 9000,
        key: grunt.file.read(‘path/to/ssl.key‘),
        cert: grunt.file.read(‘path/to/ssl.crt‘)
        // you can pass in any other options you‘d like to the https server, as listed here: http://nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnectionlistener
      }
    },
  },
},

更多内容可以查看 enable livereload
on your HTML
.

时间: 2024-07-30 10:19:07

Grunt 之 watch 和 livereload的相关文章

grunt使用watch和livereload的Gruntfile.js的配置

周末在家看angularJS, 用grunt的livereload的自动刷新, 搞了大半天, 现在把配置贴出来, 免得以后忘记了, 只要按照配置一步步弄是没有问题的; 开始的准备的环境安装是: (1):nodeJS,去官方网站下载(href); (2):然后把nodeJS加到全局的环境变量里面去(nodeJS安装好了就能用npm这个命令了),参考(href); (3):执行npm install grunt -g 和 npm install -g grunt-cli,一个是安装服务端的gurnt

使用grunt实现livereload(实时刷新)

在做网页的时候,经常刷新页面去查看修改的代码是否正常的显示出来.经常按[刷新键]好麻烦,如果改了代码后,浏览器上就能看到更新代码后的效果,那多好啊. 使用grunt(温习一下怎么使用grunt) 1.在项目路径下安装grunt sudo npm install grunt --save-dev 2.生成package.json npm init 实现livereload功能,需要使用grunt-contrib-watch插件 3.安装grunt-contrib-watch插件 sudo npm

Grunt插件之LiveReload 实现页面自动刷新,所见即所得编辑

方案一: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服务

grunt 合并压缩任务

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"></scri

初探grunt.js

package.js { "name": "ttd_v3", "version": "0.1.0", "author": "liujin", "devDependencies": { "connect-livereload": "^0.5.2", "grunt": "~0.4.2", &q

Angularjs Nodejs Grunt 一个例子

做了一个简单的示例,目的是记录环境配置以及这套框架的结构流程. 1.配置环境 默认nodejs已安装. 安装以下模块:express(nodejs框架),grunt(javascript task runner),grunt-contrib-watch(grunt live load插件),grunt-express-server(grunt启动express服务端插件). 命令行中进入程序目录,依次输入以下命令: npm install express 回车 npm install grunt

Angularjs Nodejs Grunt 一个样例

做了一个简单的演示样例,目的是记录环境配置以及这套框架的结构流程. 1.配置环境 默认nodejs已安装. 安装下面模块:express(nodejs框架),grunt(javascript task runner),grunt-contrib-watch(grunt live load插件),grunt-express-server(grunt启动express服务端插件). 命令行中进入程序文件夹,依次输入下面命令: npm install express 回车 npm install gr

使用 grunt 实现页面自动刷新

1.这里就不陈述 Grunt 是什么这些理论了,自行搜索哈,当然要安装的东西还是要先声明一下, 首先我们先下载安装NodeJs -> Git(下载npm)->  npm  ->  Grunt .这里一个过程就不陈述了,自己自行搜索便能安装搭建. 2.假设我们这些都已经安装好了,那么我们就从零开始搭建一个项目来测试一下(完整的目录如下) 我们简要说一下每个文件搭建与内容 1.创建一个GruntItem 空文件文件(里面包含下面文件); 2.创建一个package.json -> 我们

livereload + guard-liverload 实现自动刷新

livereload官网:http://livereload.com/ livereload就不多介绍了,网上有很多例子,但大部分都是基于node环境,在node上开启server来检测,例如我们用得nodewebx+chrome下livereload插件,或grunt/gulp+chrome下livereload插件. 我本地有个特殊的环境,就是用nginx/apche来开启server的,目的是使用远程上后端的代码,这样上面的方案就都不行了. google了一下,终于找到了guard-liv