使用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事件模拟
Jun 27 Javascript
js+JQuery返回顶部功能如何实现
Dec 03 Javascript
使用非html5实现js板连连看游戏示例代码
Sep 22 Javascript
JS,Jquery获取select,dropdownlist,checkbox下拉列表框的值(示例代码)
Jan 11 Javascript
jquery解析JSON数据示例代码
Mar 17 Javascript
js去除浏览器默认底图的方法
Jun 08 Javascript
11种ASP连接数据库的方法
Sep 18 Javascript
jQuery事件绑定on()与弹窗实现代码
Apr 28 Javascript
jQuery选择器总结之常用元素查找方法
Aug 04 Javascript
javascript监听页面刷新和页面关闭事件方法详解
Jan 09 Javascript
js实现无缝滚动图(可控制当前滚动的方向)
Feb 22 Javascript
修改vue源码实现动态路由缓存的方法
Jan 21 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
77A一级收信机修理记
2021/03/02 无线电
php基本函数汇总
2015/07/09 PHP
PHP仿微信多图片预览上传实例代码
2016/09/13 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
2019/05/09 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
javascript 动态添加表格行
2006/06/22 Javascript
javascript 树形导航菜单实例代码
2013/08/13 Javascript
DIV始终居中的js代码
2014/02/17 Javascript
JS实现距离上次刷新已过多少秒示例
2014/05/23 Javascript
javascript 获取HTML DOM父、子、临近节点
2014/06/16 Javascript
jquery实现选中单选按钮下拉伸缩效果
2015/08/06 Javascript
Javascript原型链的原理详解
2016/01/05 Javascript
全面解析Bootstrap中transition、affix的使用方法
2016/05/30 Javascript
深入理解JavaScript内置函数
2016/06/03 Javascript
xmlplus组件设计系列之图标(ICON)(1)
2017/05/05 Javascript
解决vue-cli脚手架打包后vendor文件过大的问题
2018/09/27 Javascript
JavaScript学习笔记之图片库案例分析
2019/01/08 Javascript
js序列化和反序列化的使用讲解
2019/01/19 Javascript
vue自定义指令之面板拖拽的实现
2019/04/14 Javascript
vue学习之Vue-Router用法实例分析
2020/01/06 Javascript
jQuery实时统计输入框字数及限制
2020/06/24 jQuery
解决vue+elementui项目打包后样式变化问题
2020/08/03 Javascript
Python(Tornado)模拟登录小米抢手机
2013/11/12 Python
python进阶教程之动态类型详解
2014/08/30 Python
使用Python的Tornado框架实现一个Web端图书展示页面
2016/07/11 Python
一个基于flask的web应用诞生 使用模板引擎和表单插件(2)
2017/04/11 Python
科颜氏加拿大官方网站: Kiehl’s加拿大
2016/08/16 全球购物
国际奢侈品品牌童装购物网站:Designer Childrenswear
2019/05/08 全球购物
中专生自我鉴定范文
2014/02/02 职场文书
个人委托书格式
2014/04/04 职场文书
技术入股合作协议书
2014/10/07 职场文书
优秀教师先进事迹材料
2014/12/15 职场文书
置业顾问岗位职责
2015/02/09 职场文书
2016元旦晚会主持词
2015/07/01 职场文书
庆祝教师节主持词
2015/07/06 职场文书
css清除浮动clearfix:after的用法详解(附完整代码)
2023/05/21 HTML / CSS