一、contrib-watch 插件的使用

1、安装 “grunt-contrib-watch ”插件命令(在终端进入到项目根目录执行)

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

2、在项目根目录下提供 watch 插件任务配置需要的 src 目录和源文件(源文件放置到 src 目录下)

            mkdir src

3、在 Gruntfile.js 文件中对 watch 任务进行配置

 // 包装函数
module.exports = function (grunt) {
       // 任务配置,所有插件的配置信息
       grunt.initConfig({
               // 获取 package.json 的信息
               pkg: grunt.file.readJSON('package.json'),
               // concat 插件的配置信息
               concat: {
                   options: {
                       separator: ';',                 // 设置输出文件合并的字符
                       banner: '/*被合成的文件第一行内容说明文字信息*/',
                       footer: '/*被合成的文件尾部内容说明文字信息*/',
                       stripBanners: true         // 去掉被合成的文件内容中的 /* */ 注释信息
                   },
                   // 具体任务配置
                   dist: {
                       // 被合并的文件路径
                       src: ['src/zepto.js','src/jquery.js','src/swiper.js','src/commons.js'],
                       // 被合成的文件路径
                       dest: 'dest/libs.js'
                   }
               },
               // uglify 插件的配置信息
               uglify: {
                   // 文件头部输出信息
                   options: {
                       banner: '/*! <%= pkg.file %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
                   },
                   // 具体任务配置
                   build: {
                       // 源文件
                       src: 'dest/libs.js',
                       // 目标文件
                       dest: 'dest/libs.min.js'
                   }
               },
               // watch 插件的配置信息
               watch: {
                   // 具体任务配置
                   scripts: {
                       options: {
                           spawn: true            // 是否让所有 task 任务共享一个上下文环境,加快响应时间
                       },
                       files: ['src/*.js'],
                       tasks: ['default']
                   }
               }
       });  
// 加载指定插件任务
grunt.loadNpmTasks('grunt-contrib-watch');  
grunt.loadNpmTasks('grunt-contrib-concat');  
grunt.loadNpmTasks('grunt-contrib-uglify');  

// 默认执行的任务
grunt.registerTask('default', ['concat','uglify']);
};

PS:watch 插件的配置有三项:

            “options”中通过使用 spawn 属性来指定不论由 tasks 触发的任务是不是一个子进程,当此选项设置为 false 时都可以加快响应的时间(大概是500ms),并且能让后来的 tasks 可以共享一个上下文环境,但这容易让这个 watch 失效!

            “files”中指定 watch 任务需要监视的文件。

            “tasks”中指定当监视文件发生改变时需要执行的任务。

4、最后在终端运行 "grunt watch" 命令

PS:如果提示 "Running "watch" task Waiting..."  证明就没什么问题了。想要停止 watch 任务按 ctrl + c 即可。