使用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 相关文章推荐
js资料prototype 属性
Mar 13 Javascript
javascript indexOf函数使用说明
Jul 03 Javascript
合并table相同单元格的jquery插件分享(很精简)
Jun 20 Javascript
JQuery实现鼠标滑过显示导航下拉列表
Sep 12 Javascript
获取下拉列表框的值是数组,split,$.inArray示例
Nov 13 Javascript
JQuery记住用户名和密码的具体实现
Apr 04 Javascript
10分钟学会写Jquery插件实例教程
Sep 06 Javascript
详解闭包解决jQuery中AJAX的外部变量问题
Feb 22 Javascript
jQuery插件HighCharts实现的2D对数饼图效果示例【附demo源码下载】
Mar 09 Javascript
Javascript实现一个简单的输入关键字添加标签效果实例
Jun 01 Javascript
Bootstrap 中data-[*] 属性的整理
Mar 13 Javascript
vue elementui form表单验证的实现
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
PHP与MYSQL中UTF8 中文排序示例代码
2014/10/23 PHP
php判断对象是派生自哪个类的方法
2015/06/20 PHP
一个简单至极的PHP缓存类代码
2015/10/23 PHP
不常用但很实用的PHP预定义变量分析
2019/06/25 PHP
javascript 匿名函数的理解(透彻版)
2010/01/28 Javascript
dojo学习第二天 ajax异步请求之绑定列表
2011/08/29 Javascript
通过javascript把图片转化为字符画
2013/10/24 Javascript
js读取被点击次数的简单实例(从数据库中读取)
2014/03/07 Javascript
js实现完美兼容各大浏览器的人民币大小写相互转换
2015/10/29 Javascript
jQuery判断checkbox选中状态
2016/05/12 Javascript
JSON格式的时间/Date(2367828670431)/格式转为正常的年-月-日 格式的代码
2016/07/27 Javascript
EditPlus 正则表达式 实战(3)
2016/12/15 Javascript
easyui combotree加载静态数据问题(选不上)解决方法
2016/12/26 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
2017/03/21 Javascript
详解Vue 普通对象数据更新与 file 对象数据更新
2017/04/26 Javascript
区别JavaScript函数声明与变量声明
2018/09/12 Javascript
浅谈JS中几种轻松处理'this'指向方式
2019/09/16 Javascript
微信小程序常用的3种提示弹窗实现详解
2019/09/19 Javascript
npm qs模块使用详解
2020/02/07 Javascript
解决python2.7 查询mysql时出现中文乱码
2016/10/09 Python
tensorflow识别自己手写数字
2018/03/14 Python
使用Django连接Mysql数据库步骤
2019/01/15 Python
解决Python安装时报缺少DLL问题【两种解决方法】
2019/07/15 Python
python利用openpyxl拆分多个工作表的工作簿的方法
2019/09/27 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
2019/11/06 Python
python之array赋值技巧分享
2019/11/28 Python
波兰最早的运动鞋精品店之一:Street Supply
2019/08/29 全球购物
旅游管理专业生自荐信范文
2014/01/02 职场文书
创业计划书的内容步骤和要领
2014/01/04 职场文书
什么是就业协议书
2014/04/17 职场文书
二手房购房意向书
2015/05/09 职场文书
歌舞青春观后感
2015/06/10 职场文书
复制别人的成功真的会成功吗?
2019/10/17 职场文书
利用Python读取微信朋友圈的多种方法总结
2021/08/23 Python
基于Redis6.2.6版本部署Redis Cluster集群的问题
2022/04/01 Redis
Android开发手册自定义Switch开关按钮控件
2022/06/10 Java/Android