上一回没有说完,我就是这样,做之前心中波澜壮阔,锦绣山河,等画完小草开始烦躁,完成鲜花出现动摇,然后心神涣散,最后虎头蛇尾。

  现在弥补下之前遗漏的问题。

  watch(V0.6.1)的tasks和options(github地址)

  1. watch和之前介绍的plugin有几点不同,首先files的值不是原来对象数组的形式,而是监听的文件的路径的字符串数组。
    其次,其他plugin的task结构为target+options,watch多一个属性类型,叫tasks,是监听的文件变动后需要执行的任务队列。
    目录结构还是参照之前,源文件夹是src,目标文件夹是dest,先做一个简单的实现。

    'use strict';
    
    module.exports = function(grunt) {
    
        require('load-grunt-tasks')(grunt);
    require('time-grunt')(grunt); var path = {
    src: 'src',
    dest: 'dest'
    } grunt.initConfig({
    path: path,
    copy: {
    test: {
    files: [
    {
    expand: true,
    cwd: '<%=path.src%>/',
    src: '{,*/}*',
    dest: '<%=path.dest%>/'
    }
    ]
    }
    },
    watch: {
    test: {
    tasks: [
    'copy'
    ],
    files: '<%=path.src%>/{,*/}*'
    }
    }
    }); grunt.registerTask('default', ['watch']);
    }

    执行grunt后,源文件夹下每有文件的变动,就会将所有文件复制到目标文件夹。

  2. 开始介绍options
    spawn: 是否在子进程中执行tasks,默认为true。相当概念化的东东,换种方式理解。我们在module.exports = function(grunt) 函数的开头加上一句
    console.log('task name: ' + (process.argv[2] || 'default'));

    process的nodejs中的api,这句话是打印输入的命令的第二个字符串即执行的task。比如你执行grunt default,第二个字符串就是default,执行grunt,第二个字符串就是undefined。
    再次执行grunt,打印出来的内容如下

    task name: default
    Running "watch" task
    Waiting...

    然后修改源文件夹下的内容,接下来显示的内容如下

    >> File "src\index.html" changed.
    task name: copy
    Running "copy:test" (copy) task
    Created directories, copied files Done, without errors. Execution Time (-- :: UTC)
    loading tasks 3ms ██████ %
    copy:test 22ms █████████████████████████████
    ███████████ %
    Total 26ms Completed in .309s at Tue Jan :: GMT+ (台北標準時間) - Waitin
    g...

    又打印出了task name这一行,这意味着当设置此option为true时,每次执行watch中设置的task,都相当于在命令行再次输入grunt taskname。我们把此options设置为false,做同样的操作。

    task name: default
    Running "watch" task
    Waiting...
    >> File "src\index.html" changed. Running "copy:test" (copy) task
    Created directories, copied files Running "watch" task
    Completed in .043s at Tue Jan :: GMT+ (台北標準時間) - Waitin
    g...

    没有再次执行输出task name的代码。

    所以,如果你的Gruntfile.js中读取了输入命令的部分值并保存为变量,请将此option设置为false,不然watch启动的task中将读取不到这些变量。

  3. interrupt: 如果新的变动产生时之前watch启动的task还没执行完,是否中断执行,默认为false
  4. debounceDelay: 文件变动产生event的最小时间间隔,默认为500ms
  5. event: 触发监听器的文件变动event类型,可选参数'all'(default)、'changed'、'added'、'deleted'
  6. reload: 是否重新执行之前执行的命令,一般用于监听Gruntfile.js的变动,默认为false,保持之前spawn的代码,为watch添加一个target
    config: {
    options: {
    reload: true,
    spawn: false //按之前spawn的设置将只会打印一次task name
    },
    files: 'Gruntfile.js'
    }

    执行grunt watch,然后修改Gruntfile.js,打印出来的内容

    task name: watch
    Running "watch" task
    Waiting... Reloading watch config...
    task name: watch Running "watch" task
    Waiting...
    >> File "Gruntfile.js" changed. Running "watch" task
    Completed in .017s at Tue Jan :: GMT+ (台北標準時間) - Waitin
    g...

    可见无视了spawn的设定,在本进程重新执行了原来的命令。

  7. dateFormat: Function,默认就是上面打印出来的时间
  8. atBegin: 是否在watch开启的时候执行一遍设定的tasks,默认false,样例中设置为true则执行grunt时会先进行一次copy
  9. livereload: 前一节已经提到过了
  10. cwd: 因为files不支持设置cwd,所以这里有个这样的option,和files中的功能一样
  11. livereload: task执行错误的时候是否进行livereload操作,默认为true

  至此常用的plugin基本介绍结束,当然还有jshinthtmlminimagemin等,github上的链接已经给出,相信看过之前介绍的plugin会养成一种上github看文档的习惯。

  下一篇介绍下module.exports = function(grunt){}中传入参数grunt的api,应该也是grunt系列的最后一篇了。

grunt之watch续的更多相关文章

  1. .Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整(续)-使用配置文件动态注入

    上次实现了依赖注入,但是web项目必须要引用业务逻辑层和数据存储层的实现,项目解耦并不完全:另一方面,要同时注入业务逻辑层和数据访问层,注入的服务直接写在Startup中显得非常臃肿.理想的方式是,w ...

  2. [.NET] C# 知识回顾 - 委托 delegate (续)

    C# 知识回顾 - 委托 delegate (续) [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6046171.html 序 上篇<C# 知识回 ...

  3. 初学seaJs模块化开发,利用grunt打包,减少http请求

    原文地址:初学seaJs模块化开发,利用grunt打包,减少http请求 未压缩合并的演示地址:demo2 学习seaJs的模块化开发,适合对seajs基础有所了解的同学看,目录结构 js — —di ...

  4. grunt配置任务

    这个指南解释了如何使用 Gruntfile 来为你的项目配置task.如果你还不知道 Gruntfile 是什么,请先阅读 快速入门 指南并看看这个Gruntfile 实例. Grunt配置 Grun ...

  5. 快速开发Grunt插件----压缩js模板

    前言 Grunt是一款前端构建工具,帮助我们自动化搭建前端工程.它可以实现自动对js.css.html文件的合并.压缩等一些列操作.Grunt有很多插件,每一款插件实现某个功能,你可以通过npm命名去 ...

  6. 是时候搁置Grunt,耍一耍gulp了

    也算是用了半年Grunt,几个月前也写过一篇它的入门文章(点此查看),不得不说它是前端项目的一个得力助手.不过技术工具跟语言一样日新月异,总会有更好用的新的东西把旧的拍死在沙滩上(当然Grunt肯定没 ...

  7. 应用Grunt自动化地优化你的项目前端

    在不久前我曾写了一篇 应用r.js来优化你的前端 的文章,为大家介绍了r.js这个实用工具,它可以很好地压缩.合并前端文件并打包整个项目.但是如果将r.js放到项目中,我们不得不顾及到一个问题——项目 ...

  8. Grunt(页面静态引入的文件地址的改变探究)-V2.0

    相关插件的引用: grunt-usemin  对页面的操作 grunt-contrib-cssmin  压缩css load-grunt-tasks 瘦身gruntfile grunt-rev给md5 ...

  9. Grunt基本使用-V1.0

    浅语:grunt中文网:http://www.gruntjs.net/ 第一步:Grunt 依赖 Node.js 所以在安装之前确保你安装了 Node.js.然后开始安装 Grunt. 实际上,安装的 ...

随机推荐

  1. Spring Boot中使用Swagger2构建API文档

    程序员都很希望别人能写技术文档,自己却很不愿意写文档.因为接口数量繁多,并且充满业务细节,写文档需要花大量的时间去处理格式排版,代码修改后还需要同步修改文档,经常因为项目时间紧等原因导致文档滞后于代码 ...

  2. 第二棵树:Splay

    Splay这东西神难打--什么都没动板子敲上就直逼200行了,而且非常难记(仿佛是模板长的必然结果).但是为什么还要学呢?据说是因为它可以实现区间操作.但是自从我得知无旋Treap也能做到这些,默默对 ...

  3. 各种排序算法及其java程序实现

    各种排序算法:冒择路(入)兮(稀)快归堆,桶式排序,基数排序 冒泡排序,选择排序,插入排序,稀尔排序,快速排序,归并排序,堆排序,桶式排序,基数排序 一.冒泡排序(BubbleSort)1. 基本思想 ...

  4. JavaScript 开发总结(一)

    数据类型:JavaScript定义的数据类型有字符串.数字.布尔.数组.对象.Null.Undefined,但typeof有区分可判别的数据分类是number.string.boolean.objec ...

  5. Python查询SQLserver数据库备份(抛砖引玉)

    通过python pymssql直接访问SQLserver数据库,查找其数据库mode,这个脚本具有很强的抛砖引玉特性: 1.可以巡检多台多数据库服务器 2.query内容可以多样化,譬如查询死锁.连 ...

  6. MQ选型对比文档

    几种MQ产品说明:     ZeroMQ :  扩展性好,开发比较灵活,采用C语言实现,实际上他只是一个socket库的重新封装,如果我们做为消息队列使用,需要开发大量的代码    RabbitMQ  ...

  7. [HNOI2013]游走 期望+高斯消元

    纪念首道期望题(虽说绿豆蛙的归宿才是,但是我打的深搜总觉得不正规). 我们求出每条边的期望经过次数,然后排序,经过多的序号小,经过少的序号大,这样就可以保证最后的值最小. 对于每一条边的期望经过次数, ...

  8. MySQL for Mac 安装和基本操作

    一.安装mysql 1.mysql下载地址http://dev.mysql.com/downloads/mysql/我的机器是mac 10.8的;所以使用mysql-5.6.10-osx10.7-x8 ...

  9. PL/SQL 编程(二)游标、存储过程、函数

    游标--数据的缓存区 游标:类似集合,可以让用户像操作数组一样操作查询出来的数据集,实质上,它提供了一种从集合性质的结果中提取单条记录的手段. 可以将游标形象的看成一个变动的光标,他实质上是一个指针, ...

  10. 化工厂装箱员 洛谷 p2530

    题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须 ...