zoukankan      html  css  js  c++  java
  • grunt插件之Gruntcontribwatch

    Grunt-contrib-watch

    安装:npm install grunt-contrib-watch --save-dev

     

    Settings 设置

    files

    类型:字符串/数组

    定义当前任务监控的问价类型,可以是一个字符串(文件名)或一个文件数组或minimatch模式。

    tasks

    类型:字符串/数组

    定义当一个监测文件事件发生时运行哪个任务

    options.spawn

    是否生成任务运行在一个子进程中。设置这个选项为false会加速watch的反映速度(通常能增快500ms)而且允许后续任务运行共享相同的上下文。不生成任务运行会让watch更容易失败,所以还是按需使用。

    watch: {

      scripts: {

        files: ['**/*.js'],

        tasks: ['jshint'],

        options: {

          spawn: false,

        },

      },

    },

    options.interrupt

    类型:布尔值 默认:false

    当文件被修改时这个检测任务将生成任务在子进程中。默认的行为只在先前的进程结束后,为每个目标(target)只生成一个子进程。设置interrupt选项为true来终止先前的进程,生成一个新的给后续的变化。

    watch: {

      scripts: {

        files: '**/*.js',

        tasks: ['jshint'],

        options: {

          interrupt: true,

        },

      },

    },

    options.debounceDelay

    类型:整型 默认:500

    连续释放相同路径和状态的事件之前等待的时间。比如,你的Gruntfile.js文件发生了改变,一个改变(changed)事件,只有经过给定的毫秒数后,才能再次触发。

    options.interval

    类型:整型 默认:100

    传递给fs.watchFile的间隔。建议忽略这个选项,默认为100ms

    options.event

    类型:字符串/数组 默认:‘all

    指定触发指定任务的watch事件的类型。这个选项可以是一个或多个:'all','changed','added''deleted'

    watch: {

      scripts: {

        files: '**/*.js',

        tasks: ['generateFileManifest'],

        options: {

          event: ['added', 'deleted'],

        },

      },

    },

    options.forever

    类型:布尔型 默认:true

    这只是一个任务级别的选项,不能配置目标。默认情况下,watch任务会躲避grunt.fatalgrunt.warn将它们与现有的watch进程阻隔开。如果你不想grunt.fatalgrunt.warn被覆盖设置forever选项为false

    options.dateFormat

    类型:函数

    这是知识一个任务级别的选项,不能配置目标。默认当watch结束运行任务时,它会显示消息:Completed in 1.301s at Thu Jul 18 2013 14:58:21 GMT-0700 (PDT) - Waiting....

    如下图:

     

    你可以应用自己的函数来覆盖这个消息:

    watch: {

      options: {

        dateFormat: function(time) {

          grunt.log.writeln('The watch finished in ' + time + 'ms at' + (new Date()).toString());

          grunt.log.writeln('Waiting for more changes...');

        },

      },

      scripts: {

        files: '**/*.js',

        tasks: 'jshint',

      },

    },

    options.atBegin

    类型:布尔型 默认:false

    这个选项触发每个指定的任务运行在监视器启动时。

    options.livereload

    类型:布尔型|Number|对象 默认:false

    设置为truelivereload: 1337一个端口号会开启实时重载。默认并且建议的端口是35729

    如果开启,一个实时重载服务器将会启动和每个watch任务的每个目标。当任务已经启动后,实时重载服务器将会触发当文件修改时。

    watch: {

      css: {

        files: '**/*.sass',

        tasks: ['sass'],

        options: {

          livereload: true,

        },

      },

    },

    例子:

    Gruntfile.js文件

    //简单的配置,当test.js文件发生改变时运行jshint

     1 module.exports = function(grunt){
     2     grunt.initConfig({
     3         watch: {
     4             files: ['test.js'],
     5             tasks: ['jshint']
     6         },
     7         jshint: {
     8             files: ['test.js']
     9         }
    10     });
    11 
    12     grunt.loadNpmTasks('grunt-contrib-jshint');
    13     grunt.loadNpmTasks('grunt-contrib-watch');
    14     grunt.registerTask('default',['watch','jshint']);
    15 };

    终端中运行:grunt

     

    如上图,执行watch任务,等待test.js文件发生改变

     

    test.js文件被修改并保存后,执行jshint任务,检查test.js的语法。(在最下面增加了一个表达式:"123;"

    修改后的test.js文件:

     1 module.exports = function(grunt){
     2     grunt.initConfig({
     3         cssmin: {
     4             hehe: {
     5                 options: {
     6                     banner: '/* My minified css file */',
     7                     report: 'gzip'
     8                 },
     9                 files: {
    10                     'module_box.min.css': ['module_box.css']
    11                 }
    12             }
    13         }
    14     });
    15 
    16     grunt.loadNpmTasks('grunt-contrib-cssmin');
    17     grunt.registerTask('default',['cssmin']);
    18 };
    19 123;

     

    Using the watch event 使用watch事件

     

     

    Gruntfile.js文件:

     1 module.exports = function(grunt){
     2     grunt.initConfig({
     3         watch: {
     4             files: ['test.js'],
     5         },
     6         jshint: {
     7             files: ['test.js']
     8         }
     9     });
    10 
    11     grunt.loadNpmTasks('grunt-contrib-jshint');
    12     grunt.loadNpmTasks('grunt-contrib-watch');
    13     
    14     grunt.event.on('watch',function(action,filepath,target){
    15         grunt.log.writeln("");
    16         grunt.log.writeln(target + ':' + filepath + ' has ' + action);
    17     });
    18     grunt.registerTask('default',['watch']);
    19 };

    grunt

     

    修改test.js

     

    watch事件触发后,输出的信息“default:test.js has changed

    如果需要动态修改你的配置,则nospawn选项需要开启,以保证watch运行在相同的上下文。

     

    Live Reloading

    将你所有的监控的目标加入实时重载最简单的方法就是设置livereloadtrue在任务级别。这样会运行一个实时重载服务器并且触发实时重载为所有的目标:

    grunt.initConfig({

      watch: {

        options: {

          livereload: true,

        },

        css: {

          files: ['public/scss/*.scss'],

          tasks: ['compass'],

        },

      },

    });

    你也可以为单独的watch目标配置实时重载或者运行多个实时重载服务器。记住,开始多个服务器时要指定不同的端口号:

     1 grunt.initConfig({
     2   watch: {
     3     css: {
     4       files: ['public/scss/*.scss'],
     5       tasks: ['compass'],
     6       options: {
     7         // Start a live reload server on the default port 35729
     8         livereload: true,
     9       },
    10     },
    11     another: {
    12       files: ['lib/*.js'],
    13       tasks: ['anothertask'],
    14       options: {
    15         // Start another live reload server on port 1337
    16         livereload: 1337,
    17       },
    18     },
    19     dont: {
    20       files: ['other/stuff/*'],
    21       tasks: ['dostuff'],
    22     },
    23   },
    24 });

    Enabling  Live Reload in Your HTML 在你的HTML页面中开启实时重载

    一旦你开启了一个实时重载服务器你就可以获取实时重载的脚本了。为了能在你的页面中使用实时加载,添加一个script标签在</body>标签之前:

    <script src="http://localhost:35729/livereload.js"></script>

     

     

     

     

  • 相关阅读:
    省市县 三级 四级联动Javascript JQ 插件PCASClass.js
    【转】提高PHP性能的53个技巧
    Windows下Wamp装不上Memcache扩展
    Weui 微信网站开发样式插件使用教程
    div高度自适应填充剩余部分
    Storm简介
    Spark简介
    MapReduce的输入输出
    MapReduce 2简介
    Hadoop的I/O操作
  • 原文地址:https://www.cnblogs.com/kaixinbocai/p/3672659.html
Copyright © 2011-2022 走看看