使用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 相关文章推荐
Extjs Ajax 乱码问题解决方案
Apr 15 Javascript
javascript下4个跨浏览器必备的函数
Mar 07 Javascript
JQuery Study Notes 学习笔记(一)
Aug 04 Javascript
基于jquery的无缝循环新闻列表插件
Mar 07 Javascript
模拟select的代码
Oct 19 Javascript
jQuery仅用3行代码实现的显示与隐藏功能完整实例
Oct 08 Javascript
vue+axios实现登录拦截的实例代码
May 22 Javascript
Node.js五大应用性能技巧小结(必须收藏)
Aug 09 Javascript
Node实战之不同环境下配置文件使用教程
Jan 02 Javascript
javascript回调函数详解
Feb 06 Javascript
又拍云 Node.js 实现文件上传、删除功能
Oct 28 Javascript
一小时迅速入门Mybatis之bind与多数据源支持 Java API
Sep 15 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网站安装程序制作的原理、步骤、注意事项和示例代码
2010/08/01 PHP
PHP 动态生成静态HTML页面示例代码
2014/01/15 PHP
PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法
2014/07/08 PHP
php中Ctype函数用法详解
2014/12/09 PHP
详解PHP中的Traits
2015/07/29 PHP
Yii2中多表关联查询hasOne hasMany的方法
2017/02/15 PHP
PHP编程实现的TCP服务端和客户端功能示例
2018/04/13 PHP
[原创]IE view-source 无法查看看源码 JavaScript看网页源码
2009/07/19 Javascript
基于jquery的一个OutlookBar类,动态创建导航条
2010/11/19 Javascript
用dtree实现树形菜单 dtree使用说明
2011/10/17 Javascript
js onmousewheel事件多次触发问题解决方法
2014/10/17 Javascript
jquery实现图片左右切换的方法
2015/05/07 Javascript
Vue.js报错Failed to resolve filter问题的解决方法
2016/05/25 Javascript
JS及PHP代码编写八大排序算法
2016/07/12 Javascript
Bootstrap基本插件学习笔记之Popover提示框(19)
2016/12/08 Javascript
Vue项目中配置pug解析支持
2019/05/10 Javascript
vue 实现单选框设置默认选中值
2019/11/07 Javascript
微信小程序swiper使用网络图片不显示问题解决
2019/12/13 Javascript
在Vue中实现随hash改变响应菜单高亮
2020/03/09 Javascript
[02:42]岂曰无衣,与子同袍!DOTA2致敬每一位守护人
2020/02/17 DOTA
python使用chardet判断字符串编码的方法
2015/03/13 Python
Python批量重命名同一文件夹下文件的方法
2015/05/25 Python
python获取本机所有IP地址的方法
2018/12/26 Python
python实现按关键字筛选日志文件
2019/12/24 Python
3种适用于Python的疯狂秘密武器及原因解析
2020/04/29 Python
Python使用jupyter notebook查看ipynb文件过程解析
2020/06/02 Python
CSS3 animation实现简易幻灯片轮播特效
2016/09/27 HTML / CSS
HTML5的革新 结构之美
2011/06/20 HTML / CSS
自主招生自荐信
2013/12/08 职场文书
国际贸易专业个人求职信格式
2014/02/02 职场文书
法学专业自我鉴定
2014/02/05 职场文书
商务英语专业求职信
2014/06/26 职场文书
巴黎圣母院观后感
2015/06/10 职场文书
婚礼家长致辞
2015/07/27 职场文书
劳保用品管理制度范本
2015/08/06 职场文书
HDFS免重启挂载新磁盘
2022/04/06 Servers