博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
grunt入门讲解3:实例讲解使用 Gruntfile 配置任务
阅读量:6378 次
发布时间:2019-06-23

本文共 4086 字,大约阅读时间需要 13 分钟。

这个Gruntfile 实例使用到了5个 Grunt 插件:

grunt-contrib-uglify      

grunt-contrib-qunit
grunt-contrib-concat
grunt-contrib-jshint
grunt-contrib-watch

上面的uglify,concat,watch这三个插件用的最多,第一个插件是用来压缩文件的,第二个插件是用来合并文件的,第三个插件用来监听文件内容的,如果文件内容改变了,就会触发回调方法进行相应的处理。

我们一步一步来讲解这个 Gruntfile 实例。

首先是 "wrapper" 函数,它包含了整个Grunt配置信息。

module.exports = function(grunt) { }

在这个函数中,我们可以初始化 configuration 对象:

grunt.initConfig({ });

接下来从package.json 文件读入项目配置信息,并存入pkg 属性内。这样我们就可以访问到package.json文件中列出的属性了,如下:

pkg: grunt.file.readJSON('package.json')

到目前为止我们就可以看到如下配置:

module.exports = function(grunt) {

  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json')
  });
};

接下来我们就可以为我们的每个任务来定义相应的配置了,每个任务的配置对象作为Grunt配置对象的属性,并且这个属性名称与任务名相同。因此"concat"任务就是我们的配置对象中的"concat"属性。下面便是我的"concat"任务的配置对象。

concat: {

  options: {
    // 定义一个用于插入合并输出文件之间的字符
    separator: ';'
  },
  dist: {
    // 将要被合并的文件
    src: ['src/**/*.js'],
    // 合并后的JS文件的存放位置
    dest: 'dist/<%= pkg.name %>.js'
  }
}

这里使用了pkg.name来访问我们刚才引入并存储在pkg属性中的package.json文件信息,它会被解析为一个JavaScript对象。Grunt自带的有一个简单的模板引擎用于输出配置对象(这里是指package.json中的配置对象),这里我让concat任务将所有存在于src/目录下以.js结尾的文件合并起来,然后存储在dist目录中,并以项目名来命名。

现在我们来配置uglify插件,它的作用是压缩JavaScript文件:

uglify: {

  options: {
    // 此处定义的banner注释将插入到输出文件的顶部
    banner: '/*! <%= pkg.name %> <%= grunt.template.today("dd-mm-yyyy") %> */\n'
  },
  dist: {
    files: {
      'dist/<%= pkg.name %>.min.js': ['<%= concat.dist.dest %>']
    }
  }
}

这里我们让uglify在dist/目录中创建了一个包含压缩结果的JavaScript文件。注意这里我使用了<%= concat.dist.dest>,因此uglify会自动压缩concat任务中生成的文件。

QUnit插件的设置非常简单,你只需要给它提供用于测试运行的文件的位置,注意这里的QUnit是运行在HTML文件上的。

qunit: {

  files: ['test/**/*.html']
},

JSHint插件的配置也很简单:

jshint: {  // define the files to lint  files: ['gruntfile.js', 'src/**/*.js', 'test/**/*.js'],  // configure JSHint (documented at http://www.jshint.com/docs/)  options: {      // more options here if you want to override JSHint defaults    globals: {      jQuery: true,      console: true,      module: true    }  }}

JSHint只需要一个文件数组(也就是你需要检测的文件数组), 然后是一个options对象(这个对象用于重写JSHint提供的默认检测规则)。你可以到JSHint官方文档站点中查看完整的文档。如果你乐于使用JSHint提供的默认配置,那么在Gruntfile中就不需要重新定义它们了。

然后,我们来看看watch插件:

watch: {  files: ['<%= jshint.files %>'],  tasks: ['jshint', 'qunit']}

你可以在命令行使用grunt watch来运行这个任务。当它检测到任何你所指定的文件(在这里我使用了JSHint任务中需要检测的文件)发生变化时,它就会按照你所指定的顺序执行指定的任务(在这里我指定了jshint和qunit任务)。

接下来, 我们还要加载所需要的Grunt插件。 它们应该已经全部通过npm安装好了。

grunt.loadNpmTasks('grunt-contrib-uglify');grunt.loadNpmTasks('grunt-contrib-jshint');grunt.loadNpmTasks('grunt-contrib-qunit');grunt.loadNpmTasks('grunt-contrib-watch');grunt.loadNpmTasks('grunt-contrib-concat');

最后设置了一些task。最重要的是default任务:

// 在命令行上输入"grunt test",test task就会被执行。grunt.registerTask('test', ['jshint', 'qunit']);// 只需在命令行上输入"grunt",就会执行default taskgrunt.registerTask('default', ['jshint', 'qunit', 'concat', 'uglify']);

下面便是最终完成的Gruntfile.js

module.exports = function(grunt) {  grunt.initConfig({    pkg: grunt.file.readJSON('package.json'),    concat: {      options: {        separator: ';'      },      dist: {        src: ['src/**/*.js'],        dest: 'dist/<%= pkg.name %>.js'      }    },    uglify: {      options: {        banner: '/*! <%= pkg.name %> <%= grunt.template.today("dd-mm-yyyy") %> */\n'      },      dist: {        files: {          'dist/<%= pkg.name %>.min.js': ['<%= concat.dist.dest %>']        }      }    },    qunit: {      files: ['test/**/*.html']    },    jshint: {      files: ['Gruntfile.js', 'src/**/*.js', 'test/**/*.js'],      options: {        //这里是覆盖JSHint默认配置的选项        globals: {          jQuery: true,          console: true,          module: true,          document: true        }      }    },    watch: {      files: ['<%= jshint.files %>'],      tasks: ['jshint', 'qunit']    }  });  grunt.loadNpmTasks('grunt-contrib-uglify');  grunt.loadNpmTasks('grunt-contrib-jshint');  grunt.loadNpmTasks('grunt-contrib-qunit');  grunt.loadNpmTasks('grunt-contrib-watch');  grunt.loadNpmTasks('grunt-contrib-concat');  grunt.registerTask('test', ['jshint', 'qunit']);  grunt.registerTask('default', ['jshint', 'qunit', 'concat', 'uglify']);};

 

 

 

加油!

转载于:https://www.cnblogs.com/chaojidan/p/4238922.html

你可能感兴趣的文章
Red Hat忘记root密码了怎么办?
查看>>
Team Foundation Server (TFS) 2015 安装指导
查看>>
IOS-导航路线
查看>>
word2010图片仅仅显示边框
查看>>
启动tomcat时 错误: 代理抛出异常 : java.rmi.server.ExportException: Port already in use: 1099的解决办法...
查看>>
数据质量及数据清洗方法
查看>>
排序算法(一)桶排法
查看>>
【POJ 1062】昂贵的聘礼(最短路)
查看>>
vim:去掉响铃
查看>>
Spring 小示例
查看>>
MySql清空表的方法介绍 : truncate table 表名
查看>>
codeforces水题100道 第四题 Codeforces Round #105 (Div. 2) A. Insomnia cure (math)
查看>>
Zabbix-3.0.3结合Grafana-3.1.0给你想要的绘图
查看>>
利用 SPL 快速实现 Observer 设计模式: SplSubject 、SplObserver与SplObjectStorage【转】
查看>>
C\C++ 1A2B小游戏源码
查看>>
【SDK fix】iOS 8下将UIButton放置于tabbar位置无法响应event
查看>>
Android项目实战(三十八):2017最新 将AndroidLibrary提交到JCenter仓库(图文教程)...
查看>>
地平线“小目标”:2025年,三千万汽车搭载地平线自动驾驶BPU
查看>>
“2016大数据技术与应用人才培养研讨会” 在泸州成功召开
查看>>
大数据和数字化转型
查看>>