使用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 相关文章推荐
ExtJS 简介 让你知道extjs是什么
Dec 29 Javascript
js中Math之random,round,ceil,floor的用法总结
Dec 26 Javascript
谷歌地图打不开的解决办法
Aug 07 Javascript
JQuery标签页效果的两个实例讲解(4)
Sep 17 Javascript
javascript html5摇一摇功能的实现
Apr 19 Javascript
通用无限极下拉菜单的实现代码
May 31 Javascript
js判断用户是输入的地址请求的路径(实例讲解)
Jul 18 Javascript
详解Angular4 路由设置相关
Aug 26 Javascript
JavaScript字符串转数字的5种方法及遇到的坑
Jul 16 Javascript
elementUI select组件value值注意事项详解
May 29 Javascript
vue中的 $slot 获取插槽的节点实例
Nov 12 Javascript
15分钟学会vue项目改造成SSR(小白教程)
Dec 17 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
用PHPdig打造属于你自己的Google[图文教程]
2007/02/14 PHP
解析php addslashes()与addclashes()函数的区别和比较
2013/06/24 PHP
PHP生成Gif图片验证码
2013/10/27 PHP
PHP会话处理的10个函数
2015/08/11 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
2016/08/17 PHP
一个js封装的不错的选项卡效果代码
2008/02/15 Javascript
javascript parseInt 大改造
2009/09/27 Javascript
ajax 缓存 问题 requestheader
2010/08/01 Javascript
3款实用的在线JS代码工具(国外)
2012/03/15 Javascript
深入理解JavaScript系列(16) 闭包(Closures)
2012/04/12 Javascript
js改变img标签的src属性在IE下没反应的解决方法
2013/07/23 Javascript
关于js内存泄露的一个好例子
2013/12/09 Javascript
JSONP之我见
2015/03/24 Javascript
dedecms页面如何获取会员状态的实例代码
2016/03/15 Javascript
jQuery基础知识点总结(必看)
2016/05/31 Javascript
JS/jQ实现免费获取手机验证码倒计时效果
2016/06/13 Javascript
Vue.js组件使用开发实例教程
2016/11/01 Javascript
解决jquery有正确返回值但不执行success函数的问题
2018/08/20 jQuery
详解javascript replace高级用法
2019/02/17 Javascript
用jQuery实现抽奖程序
2020/04/12 jQuery
vue模块移动组件的实现示例
2020/05/20 Javascript
Python实现遍历数据库并获取key的值
2015/05/17 Python
python实现爬虫统计学校BBS男女比例(一)
2015/12/31 Python
python使用xlrd与xlwt对excel的读写和格式设定
2017/01/21 Python
基于Django模板中的数字自增(详解)
2017/09/05 Python
python创建列表和向列表添加元素的实现方法
2017/12/25 Python
Python3.6安装及引入Requests库的实现方法
2018/01/24 Python
python实现定时自动备份文件到其他主机的实例代码
2018/02/23 Python
python简单验证码识别的实现方法
2019/05/10 Python
详解10个可以快速用Python进行数据分析的小技巧
2019/06/24 Python
某公司的.net工程师面试题笔试题
2013/11/22 面试题
农村婚礼证婚词
2014/01/10 职场文书
母亲80寿诞答谢词
2014/01/16 职场文书
科级干部群众路线教育实践活动对照检查材料思想汇报
2014/09/20 职场文书
投标人法定代表人授权委托书格式
2014/09/28 职场文书
教师个人教学总结
2015/02/11 职场文书