使用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 相关文章推荐
拖动一个HTML元素
Dec 22 Javascript
js的闭包的一个示例说明
Nov 18 Javascript
JS无限极树形菜单,json格式、数组格式通用示例
Jul 30 Javascript
javascript loadScript异步加载脚本示例讲解
Nov 14 Javascript
ext前台接收action传过来的json数据示例
Jun 17 Javascript
jquery实现根据浏览器窗口大小自动缩放图片的方法
Jul 17 Javascript
微信小程序 UI布局常用技巧整理总结
Dec 05 Javascript
详解AngularJS之$window窗口对象
Jan 17 Javascript
原生js检测页面加载完毕的实例
Sep 11 Javascript
小程序实现按下录音松开识别语音
Nov 22 Javascript
Element Steps步骤条的使用方法
Jul 26 Javascript
vant-ui框架的一个bug(解决切换后onload不触发)
Nov 11 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
地球防卫队:陪着奥特曼打小怪兽的人类力量 那些经典队服
2020/03/08 日漫
77A一级收信机修理记
2021/03/02 无线电
php&java(二)
2006/10/09 PHP
PHP strncasecmp字符串比较的小技巧
2011/01/04 PHP
微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动
2014/10/21 PHP
php在数据库抽象层简单使用PDO的方法
2015/11/03 PHP
JQuery 选择和过滤方法代码总结
2010/11/19 Javascript
js 处理URL实用技巧
2010/11/23 Javascript
浅析jQuery中调用ajax方法时在不同浏览器中遇到的问题
2014/06/11 Javascript
jquery解决客户端跨域访问问题
2015/01/06 Javascript
简介JavaScript中POSITIVE_INFINITY值的使用
2015/06/05 Javascript
Javascript实现商品秒杀倒计时(时间与服务器时间同步)
2015/09/16 Javascript
详解JavaScript基于面向对象之继承实例
2015/12/16 Javascript
AngularJS ngModel实现指令与输入直接的数据通信
2016/09/21 Javascript
微信小程序实现验证码获取倒计时效果
2018/02/08 Javascript
angular实现页面打印局部功能的思考与方法
2018/04/13 Javascript
微信小程序scroll-view锚点链接滚动跳转功能
2019/12/12 Javascript
vue项目配置同一局域网可使用ip访问的操作
2020/10/23 Javascript
在Python的Django框架中包装视图函数
2015/07/20 Python
一步步解析Python斗牛游戏的概率
2016/02/12 Python
Python切片知识解析
2016/03/06 Python
python添加模块搜索路径方法
2017/09/11 Python
为什么说python更适合树莓派编程
2020/07/20 Python
Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法
2020/07/21 Python
使用CSS3制作一个简单的进度条(demo)
2017/05/23 HTML / CSS
加拿大女装网上购物:Reitmans
2016/10/20 全球购物
以设计师精品品质提供快速时尚:PopJulia
2018/01/09 全球购物
美国玩具公司:U.S.Toy
2018/05/19 全球购物
地球一小时倡议书
2014/04/15 职场文书
《每逢佳节倍思亲》教后反思
2014/04/19 职场文书
2014年教师思想工作总结
2014/12/03 职场文书
2015年社区卫生工作总结
2015/04/21 职场文书
2015年公务员工作总结
2015/04/24 职场文书
婚礼男方父母答谢词
2015/09/29 职场文书
2016党校学习心得体会
2016/01/07 职场文书
Vue过滤器(filter)实现及应用场景详解
2021/06/15 Vue.js