使用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 相关文章推荐
jquery ready函数源代码研究
Dec 06 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
Oct 10 Javascript
深入理解Node.js的HTTP模块
Oct 12 Javascript
AngularJS表单基本操作
Jan 09 Javascript
JavaScript实现换肤功能
Sep 15 Javascript
详解Vue中localstorage和sessionstorage的使用
Dec 22 Javascript
vue项目中应用ueditor自定义上传按钮功能
Apr 27 Javascript
使用node.js实现微信小程序实时聊天功能
Aug 13 Javascript
微信小程序自定义tabBar组件开发详解
Sep 24 Javascript
微信小程序实现工作时间段选择
Feb 15 Javascript
探索JavaScript中私有成员的相关知识
Jun 13 Javascript
记录微信小程序 height: calc(xx - xx);无效问题
Dec 30 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中的str_repeat函数在JavaScript中的实现
2013/09/16 PHP
PHP中让curl支持sock5的代码实例
2015/01/21 PHP
php面向对象中static静态属性与方法的内存位置分析
2015/02/08 PHP
CodeIgniter与PHP5.6的兼容问题
2015/07/16 PHP
PHP-X系列教程之内置函数的使用示例
2017/10/16 PHP
jquery 多级下拉菜单核心代码
2010/05/21 Javascript
解析Jquery取得iframe中元素的几种方法
2013/07/04 Javascript
jQuery的cookie插件实现保存用户登陆信息
2014/04/15 Javascript
扩展jQuery对象时如何扩展成员变量具体怎么实现
2014/04/25 Javascript
JavaScript获取鼠标移动时的坐标(兼容IE8、chome谷歌、Firefox)
2014/09/13 Javascript
javascript正则表达式中分组详解
2016/07/17 Javascript
Bootstrap警告(Alerts)的实现方法
2017/03/22 Javascript
深入理解nodejs中Express的中间件
2017/05/19 NodeJs
jQuery插件DataTables分页开发心得体会
2017/08/22 jQuery
浅谈实现vue2.0响应式的基本思路
2018/02/13 Javascript
javacript replace 正则取字符串中的值并替换【推荐】
2018/09/13 Javascript
vue-cli3 项目从搭建优化到docker部署的方法
2019/01/28 Javascript
微信小程序wx.request拦截器使用详解
2019/07/09 Javascript
jquery获取并修改触发事件的DOM元素示例【基于target 属性】
2019/10/10 jQuery
微信小程序以ssm做后台开发的实现示例
2020/04/08 Javascript
python del()函数用法
2013/03/24 Python
Python中的作用域规则详解
2015/01/30 Python
详解Python开发中如何使用Hook技巧
2017/11/01 Python
python中将\\uxxxx转换为Unicode字符串的方法
2018/09/06 Python
对Django的restful用法详解(自带的增删改查)
2019/08/28 Python
python装饰器练习题及答案
2019/11/01 Python
python将时分秒转换成秒的实例
2019/12/07 Python
pytorch 自定义参数不更新方式
2020/01/06 Python
python生成任意频率正弦波方式
2020/02/25 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
2020/02/28 Python
浅谈Python的方法解析顺序(MRO)
2020/03/05 Python
日本著名化妆品零售网站:Cosme Land
2019/03/01 全球购物
AVI-8手表美国官方商店:AVI-8 USA
2019/04/10 全球购物
光电信息专业应届生求职信
2013/10/07 职场文书
小学生民族团结演讲稿
2014/08/27 职场文书
优秀班主任主要事迹材料
2014/12/16 职场文书