使用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 Date对象 日期获取函数
Dec 19 Javascript
javascript学习笔记(二) js一些基本概念
Jun 18 Javascript
JavaScript自定义等待wait函数实例分析
Mar 23 Javascript
JS实现仿Windows7风格的网页右键菜单效果代码
Sep 11 Javascript
【JS+CSS3】实现带预览图幻灯片效果的示例代码
Mar 17 Javascript
js+css实现select的美化效果
Mar 24 Javascript
JS中BOM相关知识点总结(必看篇)
Nov 22 Javascript
微信小程序实现的五星评价功能示例
Apr 25 Javascript
vue element-ui之怎么封装一个自己的组件的详解
May 20 Javascript
jQuery 选择方法及$(this)用法实例分析
May 19 jQuery
js实现简易ATM功能
Oct 27 Javascript
vue单元格多列合并的实现
Nov 26 Vue.js
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
风味层面去分析咖啡油脂
2021/03/03 咖啡文化
php curl的深入解析
2013/06/02 PHP
php中 $$str 中 "$$" 的详解
2015/07/06 PHP
教你识别简单的免查杀PHP后门
2015/09/13 PHP
php实现word转html的方法
2016/01/22 PHP
PHP实现接收二进制流转换成图片的方法
2017/01/10 PHP
php文件操作之文件写入字符串、数组的方法分析
2019/04/15 PHP
大家未必知道的Js技巧收藏
2008/04/07 Javascript
js DOM模型操作
2009/12/28 Javascript
javascript笔记 String类replace函数的一些事
2011/09/22 Javascript
浅析js设置控件的readonly与enabled属性问题
2013/12/25 Javascript
为JS扩展Array.prototype.indexOf引发的问题及解决办法
2015/01/21 Javascript
写给小白的JavaScript引擎指南
2015/12/04 Javascript
使用Angular缓存父页面数据的方法
2017/01/03 Javascript
工厂模式在JS中的实践
2017/01/18 Javascript
微信小程序webview与h5通过postMessage实现实时通讯的实现
2019/08/20 Javascript
解决vue打包后刷新页面报错:Unexpected token
2019/08/27 Javascript
关于vue 结合原生js 解决echarts resize问题
2020/07/26 Javascript
js面向对象方式实现拖拽效果
2021/03/03 Javascript
[43:18]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
跟老齐学Python之有容乃大的list(3)
2014/09/15 Python
Python中利用sqrt()方法进行平方根计算的教程
2015/05/15 Python
Python 类与元类的深度挖掘 I【经验】
2016/05/06 Python
浅析PHP与Python进行数据交互
2018/05/15 Python
Python 字符串转换为整形和浮点类型的方法
2018/07/17 Python
python开发准备工作之配置虚拟环境(非常重要)
2019/02/11 Python
python实现大战外星人小游戏实例代码
2019/12/26 Python
以太网Ethernet IEEE802.3
2013/08/05 面试题
金士达面试非笔试
2012/03/14 面试题
Linux的主要特性
2016/09/03 面试题
ajax是什么及其工作原理
2012/02/08 面试题
中学教师教育感言
2014/02/21 职场文书
美容院员工规章制度
2015/08/05 职场文书
python爬不同图片分别保存在不同文件夹中的实现
2021/04/02 Python
python利用pandas分析学生期末成绩实例代码
2021/07/09 Python
一定要知道的 25 个 Vue 技巧
2021/11/02 Vue.js