使用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 相关文章推荐
静态页面的值传递(三部曲)
Sep 25 Javascript
jquery 插件之仿“卓越亚马逊”首页弹出菜单效果
Dec 25 Javascript
EasySlider 基于jQuery功能强大简单易用的滑动门插件
Jun 11 Javascript
js 判断checkbox是否选中的操作方法
Nov 09 Javascript
jQuery 获取URL的GET参数值的小例子
Apr 18 Javascript
JavaScript禁止页面操作的示例代码
Dec 17 Javascript
js中生成map对象的方法
Jan 09 Javascript
JavaScript实现的encode64加密算法实例分析
Apr 15 Javascript
Vue实现textarea固定输入行数与添加下划线样式的思路详解
Jun 28 Javascript
vue-router+nginx 非根路径配置方法
Jun 30 Javascript
面试题:react和vue的区别分析
Apr 08 Javascript
Angular8 Http拦截器简单使用教程
Aug 20 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 截取utf-8格式的字符串实例代码
2016/10/30 PHP
php数据结构之顺序链表与链式线性表示例
2018/01/22 PHP
PHP设计模式之工厂模式定义与用法详解
2018/04/03 PHP
Laravel关联模型中过滤结果为空的结果集(has和with区别)
2018/10/18 PHP
Yii2框架控制器、路由、Url生成操作示例
2019/05/27 PHP
PHP 使用位运算实现四则运算的代码
2021/03/09 PHP
Jquery 最近浏览过的商品的功能实现代码
2010/05/14 Javascript
基于jquery的页面划词搜索JS
2010/09/14 Javascript
用Juery网页选项卡实现代码
2011/06/13 Javascript
JS判断客服QQ号在线还是离线状态的方法
2015/01/13 Javascript
JavaScript跨平台的开源框架NativeScript
2015/03/24 Javascript
jQuery使用append在html元素后同时添加多项内容的方法
2015/03/26 Javascript
js实现鼠标点击文本框自动选中内容的方法
2015/08/20 Javascript
基于KO+BootStrap+MVC实现的分页控件代码分享
2016/11/07 Javascript
利用JavaScript在网页实现八数码启发式A*算法动画效果
2017/04/16 Javascript
node.js中http模块和url模块的简单介绍
2017/10/06 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
2019/09/24 Javascript
微信小程序 导入图标实现过程详解
2019/10/11 Javascript
Vue获取微博授权URL代码实例
2020/11/04 Javascript
微信小程序实现日历小功能
2020/11/18 Javascript
详细解读Python的web.py框架下的application.py模块
2015/05/02 Python
python求解数组中两个字符串的最小距离
2018/09/27 Python
Python3 SSH远程连接服务器的方法示例
2018/12/29 Python
Python求解排列中的逆序数个数实例
2020/05/03 Python
python中用ctypes模拟点击的实例讲解
2020/11/26 Python
Fairyseason:为个人和批发商提供女装和配件
2017/03/01 全球购物
捷克领先的户外服装及配件市场零售商:ALPINE PRO
2018/01/09 全球购物
加拿大快时尚零售商:Ardene
2018/02/14 全球购物
Electrolux伊莱克斯巴西商店:家用电器、小家电和配件
2018/05/23 全球购物
size?爱尔兰官方网站:英国伦敦的球鞋精品店
2019/03/31 全球购物
美国巧克力喷泉品牌:Sephra
2019/05/05 全球购物
党委书记岗位职责
2013/11/24 职场文书
市优秀教师事迹材料
2014/02/05 职场文书
材料会计岗位职责
2014/03/06 职场文书
导师推荐信范文
2014/05/09 职场文书
2014年幼儿园教研工作总结
2014/12/04 职场文书