使用GruntJS构建Web程序之Tasks(任务)篇


Posted in Javascript onJune 06, 2014

如何自定义Grunt任务

有时我们需要写一些自己的grunt任务,下面是一个具体例子

一、准备

1. 新建一个目录g1
2. 新建package.json,放入g1
3. 新建Gruntfile.js,放入g1

package.json

 
{
    "name": "g1",
    "version": "0.1.0",
    "author": "@snandy",
    "homepage": "http://www.g1.com",
    "devDependencies": {
        "grunt": "~0.4.0"
    }
}

4. cd进入g1,npm install安装grunt包

这整个目录结构如下

使用GruntJS构建Web程序之Tasks(任务)篇

Gruntfile.js暂时空着。

二、创建一个最简单的任务

grunt.registerTask(taskName, [description,] taskFunction)

taskName 任务名称,命令行里使用 grunt + taskName
description 任务的描述
taskFunction 任务的实现

Gruntfile.js里填入一下代码

 
module.exports = function(grunt) {
    grunt.registerTask('mytask', '一个最简单的任务演示,根据参数打印不同的输出.', function(arg1, arg2) {
        if (arguments.length === 0) {
            grunt.log.writeln('任务' + this.name + ", 没有传参数");
        } else if (arguments.length === 1) {
            grunt.log.writeln('任务' + this.name + ", 有一个参数是" + arg1);
        } else {
            grunt.log.writeln('任务' + this.name + ", 有两个参数分别是" + arg1 + ", " + arg2);
        }
    });
};

注册了一个任务“mytask”,实现一个最简单的根据所传参数不同实现不同的打印输出,看运行结果我们需要进入命令行。

进入到g1目录,输入 grunt mytask

使用GruntJS构建Web程序之Tasks(任务)篇

再输入 grunt mytask:snandy

使用GruntJS构建Web程序之Tasks(任务)篇

任务名后面加一个冒号就可以传参了

再输入 grunt mytask:snandy:backus

使用GruntJS构建Web程序之Tasks(任务)篇

冒号间隔可以传多个参数

三、一次创建多个任务

grunt.registerMultiTask(taskName, [description,] taskFunction)

可以看到参数是一样的,方法名不同。但使用方式却不太同,需要先初始化config,Gruntfile.js如下

 
module.exports = function(grunt) {
    grunt.initConfig({
        log: {
            t1: [1, 2, 3],
            t2: 'hello world',
            t3: false
        }
    });    grunt.registerMultiTask('log', 'Log stuff.', function() {
        grunt.log.writeln(this.target + ': ' + this.data);
    });
};

进入g1目录,分别测试下

输入 grunt,会依次执行三个子任务t1,t2,t3

使用GruntJS构建Web程序之Tasks(任务)篇

分别输入 grunt log:t1, grunt log:t2, grunt log:t3

使用GruntJS构建Web程序之Tasks(任务)篇

四、任务间通讯

在一个任务内部可以调用另外一个任务,如下

 
module.exports = function(grunt) {    grunt.registerTask('mytask', '一个最简单的任务演示,根据参数打印不同的输出.', function(arg1, arg2) {
        if (arguments.length === 0) {
            grunt.log.writeln('任务' + this.name + ", 没有传参数");
        } else if (arguments.length === 1) {
            grunt.log.writeln('任务' + this.name + ", 有一个参数是" + arg1);
        } else {
            grunt.log.writeln('任务' + this.name + ", 有两个参数分别是" + arg1 + ", " + arg2);
        }
    });
    grunt.registerTask('default', '默认的任务', function() {
        // 调用mytask
        grunt.task.run('mytask:param1:param2')
    })
};

进入命令行,输入grunt

使用GruntJS构建Web程序之Tasks(任务)篇

调用多个任务,以逗号分隔传给run方法即可,或者以数组形式

grunt.registerTask('default', '默认的任务', function() {
    grunt.task.run('mytask1', 'mytask2')
    // 或者
    grunt.task.run(['mytask1', 'mytask2'])   
})
Javascript 相关文章推荐
JavaScript NaN和Infinity特殊值 [译]
Sep 20 Javascript
js清空表单数据的两种方式(遍历+reset)
Jul 18 Javascript
jQuery中prevUntil()方法用法实例
Jan 08 Javascript
原生js和jQuery写的网页选项卡特效对比
Apr 27 Javascript
Jquery轮播效果实现过程解析
Mar 30 Javascript
jQuery实现简单滚动动画效果
Apr 07 Javascript
web.js.字符串与正则表达式操作
May 13 Javascript
原生js FileReader对象实现图片上传本地预览效果
Mar 27 Javascript
浅谈ECMAScript6新特性之let、const
Aug 02 Javascript
vue-cli3配置与跨域处理方法
Aug 17 Javascript
Vue中computed及watch区别实例解析
Aug 01 Javascript
node中使用shell脚本的方法步骤
Mar 23 Javascript
javascript中加号(+)操作符的一些神奇作用
Jun 06 #Javascript
使用GruntJS构建Web程序之合并压缩篇
Jun 06 #Javascript
Javascript动态引用CSS文件的2种方法介绍
Jun 06 #Javascript
jquery 隐藏与显示tr标签示例代码
Jun 06 #Javascript
Node.js中对通用模块的封装方法
Jun 06 #Javascript
JavaScript中对循环语句的优化技巧深入探讨
Jun 06 #Javascript
jquery修改网页背景颜色通过css方法实现
Jun 06 #Javascript
You might like
中国收音机工业发展史
2021/03/02 无线电
php下连接mssql2005的代码
2011/01/17 PHP
支付宝接口开发集成支付环境小结
2015/03/17 PHP
PHP经典设计模式之依赖注入定义与用法详解
2019/05/21 PHP
greybox——不开新窗口看新的网页
2007/02/20 Javascript
通过隐藏option实现select的联动效果
2009/11/10 Javascript
使用JavaScript switch case 另类写法
2010/03/14 Javascript
Javascript中的变量使用说明
2010/05/18 Javascript
基于jQuery的遍历同id元素 并响应事件的代码
2012/06/14 Javascript
jquery 触发a链接点击事件解决方案
2013/05/02 Javascript
JS 如何获取radio选中后的值及不选择取radio的值
2013/10/28 Javascript
将中国标准时间转换成标准格式的代码
2014/03/20 Javascript
js实现同一页面多个运动效果的方法
2015/04/10 Javascript
jQuery实现网页抖动的菜单抖动效果
2015/08/07 Javascript
跟我学习javascript的arguments对象
2015/11/16 Javascript
jQuery遍历json的方法分析
2016/04/16 Javascript
详解Javascript中DOM的范围
2017/02/13 Javascript
javascript中apply/call和bind的使用
2017/02/15 Javascript
JS中使用media实现响应式布局
2017/08/04 Javascript
jQuery Datatables表头不对齐的解决办法
2017/11/27 jQuery
Vue2 添加数据可视化支持的方法步骤
2019/01/02 Javascript
关于layui的动态图标不显示的解决方法
2019/09/04 Javascript
Vue 解决路由过渡动画抖动问题(实例详解)
2020/01/05 Javascript
vue搜索页开发实例代码详解(热门搜索,历史搜索,淘宝接口演示)
2020/04/11 Javascript
JS实现鼠标移动拖尾
2020/12/27 Javascript
python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)
2017/03/12 Python
Python实现的栈(Stack)
2018/01/26 Python
将python文件打包成EXE应用程序的方法
2019/05/22 Python
Python寻找路径和查找文件路径的示例
2019/07/10 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
2019/08/05 Python
Python 判断时间是否在时间区间内的实例
2020/05/16 Python
Python爬虫破解登陆哔哩哔哩的方法
2020/11/17 Python
让IE6支持css3,让 IE7、IE8 都支持CSS3
2011/10/09 HTML / CSS
英国最大的独立家具零售商:Furniture Village
2016/09/06 全球购物
门诊挂号室室长岗位职责
2013/11/27 职场文书
上级检查欢迎词
2014/01/18 职场文书