Grunt 学习笔记【2】---- 配置和创建任务
本文主要讲Grunt任务配置。
说明:本文所有示例都基于Grunt 0.4.5版本。
一 说明
使用Grunt实现项目的打包等工程化工作,实际上是通过Grunt提供的机制和插件,配置一个个任务(例如:拷贝内容、混淆压缩、格式检查、清除等),当输入grunt命令时,就逐个执行配置好的任务,从而实现项目打包等工程化工作。
Grunt的任务配置都是在 Gruntfile.js文件 中的grunt.initConfig(configObj)参数configObj中指定的。如果你还不知道 Gruntfile.js 是什么,请先阅读 Grunt 学习笔记【1】----基础知识。
每个任务都是configObj的一个对象类型的属性,在这个属性中配置该任务的信息。
configObj中可以定义任何其它数据,但要注意,一旦这些代表任意数据的属性与任务所需要的属性相冲突,就将被忽略。
此外,由于这本身就是JavaScript,因此你不仅限于使用JSON;你可以在这里使用任何有效的JavaScript。必要的情况下,你甚至可以以编程的方式生成配置。
grunt.initConfig({
concat: {
// 这里是concat任务的配置信息。
},
uglify: {
// 这里是uglify任务的配置信息
},
// 任意数据。
my_property: 'whatever',
my_src_files: ['foo/*.js', 'bar/*.js'],
});
二 配置任务信息
在grunt.initConfig(configObj)参数configObj中配置任务信息,每个任务都是configObj的一个对象类型的属性,在这个属性中配置该任务的信息。
当运行一个任务时,Grunt会自动查找配置对象configObj中的同名属性。
多任务(一种类型任务,但需要多次执行)可以通过任意命名的“目标(target)”来定义多个配置。在下面的案例中,concat类型的任务有名为foo和bar两个目标,而uglify任务仅仅只有一个名为bar目标。
grunt.initConfig({
concat: {
foo: {
// concat task "foo" target options and files go here.
},
bar: {
// concat task "bar" target options and files go here.
},
},
uglify: {
bar: {
// uglify task "bar" target options and files go here.
},
},
});
同时指定任务(task)和目标(target),例如grunt concat:foo或者grunt concat:bar,将只会处理指定目标(target)的配置,而运行grunt concat将遍历所有目标(target)并依次处理。注意,如果一个任务使用grunt.task.renameTask重命名过,Grunt将在配置对象中查找以新的任务名命名的属性。
options属性:
在一个任务配置中,options属性可以用来指定覆盖内置属性的默认值。此外,每一个目标(target)中还可以拥有一个专门针对此目标(target)的options属性。目标(target)级的options将会覆盖任务级的options。
options对象是可选的,如果不需要,可以忽略。
grunt.initConfig({
concat: {
options: {
// 这里是任务级的Options,覆盖默认值
},
foo: {
options: {
// "foo" target options may go here, overriding task-level options.
},
},
bar: {
// No options specified; this target will use task-level options.
},
},
});
指定任务处理的文件和输出的文件,有如下3种方式:
方式一:简洁格式
通过src和dest属性指定任务处理和输出的文件。通常情况下它用于只读任务,比如grunt-contrib-jshint,它就只需要一个单一的src属性,而不需要关联的dest选项。这种格式还支给每个src-dest文件映射指定额外的属性(例如:filter、nonull等)。
方式二:文件对象格式
通过files属性指定任务处理和输出的文件,files对象的属性名就是输出文件路径和文件名字符串,处理文件就是它的值(处理的文件列表则使用数组格式声明)。可以使用这种方式指定数个src-dest文件映射, 但是不能够给每个映射指定附加的属性。
方式三:文件数组格式
将files属性定义为数组,数组每个元素定义了处理和输出的文件。同时可以指定额外属性(例如:filter、nonull等)。
// 方式一
grunt.initConfig({
jshint: {
foo: {
src: ['src/aa.js', 'src/aaa.js']
},
},
concat: {
bar: {
src: ['src/bb.js', 'src/bbb.js'],
dest: 'dest/b.js',
},
},
});
// 方式二
grunt.initConfig({
concat: {
foo: {
files: {
'dest/a.js': ['src/aa.js', 'src/aaa.js'],
'dest/a1.js': ['src/aa1.js', 'src/aaa1.js'],
},
}
},
});
// 方式三
grunt.initConfig({
concat: {
foo: {
files: [
{src: ['src/aa.js', 'src/aaa.js'], dest: 'dest/a.js'},
{src: ['src/aa1.js', 'src/aaa1.js'], dest: 'dest/a1.js'},
],
},
bar: {
files: [
{src: ['src/bb.js', 'src/bbb.js'], dest: 'dest/b/', nonull: true},
{src: ['src/bb1.js', 'src/bbb1.js'], dest: 'dest/b1/', filter: 'isFile'},
],
},
},
});
有关配置任务的其它设置,详细参考文章第三部分。
三 创建任务
上边第一步将任务的所需要的信息都配置好了,接下来就要将具体的任务告诉Grunt。
所谓任务,实际上就是一个函数,这个函数实现了一个功能(例如:清除、混淆压缩、打日志)。
任务有2种形式:
1)自定义的任务;
2)外部定义好的任务,即各种Grunt插件。
Grunt插件非常丰富,基本上不用自定义任务。这里主要讲使用Grunt插件。有关自定义插件任务,在后边会详细说明。
下边两种方式都可以加载Grunt插件任务:
// 加载Grunt插件任务方式一
grunt.task.loadNpmTasks('grunt-contrib-clean'); // 加载Grunt插件任务方式二
grunt.loadNpmTasks('grunt-contrib-clean');
四 将任务添加到默认任务列表中
实际场景中,会有很多个任务,我们期望在命令行中输入grunt后,这些任务都能按照顺序依次执行。而不是多次输入“grunt 任务名:目标名”。
可以通过注册名字为“default”的别名任务,来实现这一功能。
task.registerTask('default', ['jshint', 'qunit', 'concat', 'uglify']);
还可以指定参数:
// 当执行grunt时,将执行concat任务的dist目标任务,然后执行uglify的dist目标任务
task.registerTask('dist', ['concat:dist', 'uglify:dist']);
注意:这个步骤不是必须的,有些可以通过配置package.json的scripts参数,实现多任务执行。
参考资料&内容来源:
Grunt官网:https://www.gruntjs.net/configuring-tasks
博客园:https://www.cnblogs.com/chaojidan/p/4238421.html
Grunt官网API:https://gruntjs.com/api/grunt
Grunt 学习笔记【2】---- 配置和创建任务的更多相关文章
- V-rep学习笔记:机器人模型创建3—搭建动力学模型
接着之前写的V-rep学习笔记:机器人模型创建2—添加关节继续机器人创建流程.如果已经添加好关节,那么就可以进入流程的最后一步:搭建层次结构模型和模型定义(build the model hierar ...
- V-rep学习笔记:机器人模型创建2—添加关节
下面接着之前经过简化并调整好视觉效果的模型继续工作流,为了使模型能受控制运动起来必须在合适的位置上添加相应的运动副/关节.一般情况下我们可以查阅手册或根据设计图纸获得这些关节的准确位置和姿态,知道这些 ...
- Linux内核分析第六周学习笔记——分析Linux内核创建一个新进程的过程
Linux内核分析第六周学习笔记--分析Linux内核创建一个新进程的过程 zl + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...
- Redis学习笔记4-Redis配置详解
在Redis中直接启动redis-server服务时, 采用的是默认的配置文件.采用redis-server xxx.conf 这样的方式可以按照指定的配置文件来运行Redis服务.按照本Redi ...
- EasyARM i.mx287学习笔记——minicom配置和使用
0 前言 在windows中有非常多串口调试软件,比如putty. 而ubuntu中也有非常多串口调试软件,当中最简单有用的便是minicom了. 本文说明虚拟机中怎样使用minico ...
- EF6学习笔记(六) 创建复杂的数据模型
EF6学习笔记总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 本篇原文地址:Creating a More Complex Data Model 本篇讲的比较碎,很多内容本人 ...
- Linux内核学习笔记之seq_file接口创建可读写proc文件
转自:http://blog.csdn.net/mumufan05/article/details/45803219 学习笔记与个人理解,如有错误,欢迎指正. 温馨提示:建议跟着注释中的编号顺序阅读代 ...
- Grunt学习笔记【8】---- grunt-angular-templates插件详解
本文主要讲如何用Grunt打包AngularJS的模板HTML. 一 说明 AngularJS中使用单独HTML模板文件的地方非常多,例如:自定义指令.ng-include.templateUrl等. ...
- Grunt学习笔记【7】---- grunt-contrib-less插件详解
本文主要讲如何使用Grunt实现less文件压缩. 一 说明 less是非常常用的样式框架之一,Grunt也提供了可以编译和打包less样式文件的插件:grunt-contrib-less. 实现原理 ...
随机推荐
- Spring Cloud学习总结(非原创)
文章大纲 一.课程内容总结二.课程学习地址三.学习资料下载四.参考文章 一.课程内容总结 二.课程学习地址 第一天:https://www.jianshu.com/p/a086421f4bfd第二 ...
- ASP.NET 5已终结,迎来ASP.NET Core 1.0和.NET Core 1.0 转
作者:yourber 命名是非常困难的事情,微软这次为了和ASP.NET4.6做区分,采用了全新的命名方式ASP.NET Core 1.0,它是一个全新的框架. ASP.NET 在过去的 15 年里是 ...
- 性能测试脚本开发(LR.NET控件)
性能测试过程中,最耗费经历的就是编写性能测试脚本的过程,在大部分的测试工具中都是采用录制的方式,通过录制产生脚本,然后根据需要进行修改,以及参数化.有些时候为了能够完成某一个功能的脚本,需要将录制下来 ...
- URAL1306 Sequence Median(卡内存神题)
给出n个数,n<=250000,求这n个数的中位数,内存限制1mb 卡内存的神题,用数组存下来刚好1mb,再加上执行时消耗内存.立即爆. 因此我们用优先队列存储一半的数. 网上的某些代码,用pr ...
- 学习已经被淘汰的flash
一.基本知识介绍 网站动画的分类:二维动画和三维动画 二维动画分类: 1.GIF动画 2.flash动画 flash软件:是矢量软件 选中带有点,并且可以任意变形的对象,叫形状 逐帧动画:在时 ...
- 图论 Krusal算法C++实现
1.实验用例 如下图所示的赋权图表示某七个城市及预先算出它们之间的一些直接通信成路造价(单位:万元),试给出一个设计方案,使得各城市之间既能够通信又使总造价最小并计算其最小值. 2实验原理和方法 为了 ...
- MongoDB入门学习(二):MongoDB的基本概念和数据类型
上一篇讲了MongoDB的安装和管理,当中涉及到了一些概念,数据结构另一些API的调用,不知道的没关系,事实上非常easy,这篇会简介一下. 1.文档 文档是MongoDB的核心概念.多个键值对有序的 ...
- 应用程序之SingleViewApplication
理论概念学习 iOS运行原理 代码结构分析 代码初步实现 一.理论学习 1⃣️.每一个应用程序都有属于自己的UIWindow,继承自UIView 2⃣️.每一个满屏的UIView都由一个UIViewC ...
- linux下robotframework执行测试用例的几种方法
1.执行指定的测试用例文件(Test Suite) [root@localhost cases]# pybot purge.txt 2.执行整个porject目录下的所有测试用例 ...
- 兔子--改动Android Studio的快捷键,改动成eclipse的快捷键
仅仅须要2步 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzQyNTUyNw==/font/5a6L5L2T/fontsize/400/fill ...