grunt入门


</br>

grunt是一个优秀的前端的自动化生产工具,最开始作者一直不用这类工具,感觉麻烦,但是当后面项目大一些后开始尝试使用,就一发不可收拾,但是对于grunt的一些机制原理等,自己也是捣鼓了一些时间,今天就来总结一下自己的经验,希望对部分同学能有一些帮助。


1.grunt的用处

对于需要反复重复的任务,例如压缩(minification)、编译、单元测试、linting等,代码合并等等,grunt可以减轻你的劳动,简化你的工作。当你在 Gruntfile 文件正确配置好了任务,任务运行器就会自动帮你完成大部分无聊的工作

2.grunt的三要素

  • task
  • target
  • options
先来简单解释一下这三个要素吧
1. task

这个就是grunt的任务,之前提过grunt是用来自动执行各种各样的任务的,比如压缩文件,合并文件,单元测试等等,这些都是一系列任务

2.target

这个是任务的目标,也就是任务具体做的事,例如有一个合并文件的任务,这个任务可以做两件具体的事:

  • build1:合并a.css和b.css
  • build2:合并a.css和c.css

每一个具体的事情就是一个target

3.options

从字面上就可以理解,这个就是配置。task或者target的配置,每个task有自己的配置,每个target也可以有自己的配置


开始做个Demo吧

</br>

咱们按顺序开始以下几步吧
  • 装上node和git,然后新建一个文件夹
  • 在文件夹的根目录中打开git 执行 npm init,会新建一个package.json文件,只需填写一下基本内容就好,在此不赘述了。
  • 全局安装grunt命令行,执行 npm install -g grunt-cli,这样后面就可以用grunt命令来执行之前我们说的task和target了
  • 安装grunt和四个插件,执行命令:
    • npm install grunt --save-dev 安装grunt
    • npm install grunt-contrib-uglify --save-dev 安装压缩插件
    • npm install grunt-contrib-watch --save-dev 安装监控文件变化插件
    • npm install grunt-contrib-cssmin --save-dev 安装css压缩插件
    • npm install grunt-contrib-csscomb --save-dev 安装css合并插件
  • 新建一个Gruntfile.js文件,这个文件中主要写的对各个任务的配置,直接贴出一个简单的Gruntfile.js的文件内容吧
module.exports=function(grunt){
// 任务配置,所有插件的配置信息
grunt.initConfig({
    // watch插件配置信息,用于观察文件的变化
    watch:{
        build:{
            files:['src/js/*.js','src/css/*.css'],
            tasks:['jshint','uglify','cssmin','csscomb'],
            options:{spawn:false}
        }
    },
    // uglify插件配置信息,用于压缩文件
    uglify: {
      build: {
        files:{
            'build/js/yourName.min.js':['src/js/test.js']
        } 
      }
    },
    // cssmin插件配置信息,用于压缩css
    cssmin:{
        options: {
            shorthandCompacting: false,
            roundingPrecision: -1
        },
        build: {
            files: {
              'build/css/output.min.css': ['src/css/*.css']
            }
        }
    },
    // csscomb插件配置信息,用于合并css
    csscomb: {
        bulid: {
            files:{
                "src/dest/css/output.restored.css":["src/css/test.css"],
                "src/dest/css/output2.restored.css":["src/css/test2.css"]
            }
        }
    }
});
// 加载包含任务的插件
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks('grunt-csscomb');
// 默认被执行的任务列表。
grunt.registerTask('default', ['uglify','cssmin','csscomb','watch']);
};

在上面的代码中,有watch,uglify,cssmin,csscomb四个task,每个task里面都有自己的options和target(uglify里没有options因为options并不是必须的,根据需求而定)</br>

对于每个task的build target里都有files属性,files属性里主要是输入和输出文件,files中的输入输出文件有四种写法,在grunt中文官网有详细描述,这里我就不细说了。
</br>
对于每个task的options,不同插件有不同的配置方式,需要各位在使用对应的插件时,去grunt插件官网看看基本的配置方法和插件描述

  • 在项目根目录打开git,如果直接执行grunt命令,则会执行组合的‘default’任务,也就是uglify ,cssmin,csscomb,watch四个task,如果需要执行指定的单个task,例如uglify,则执行命令grunt uglify,如果需要执行task的具体target,例如cssmin的build,则执行命令grunt cssmin:build

总结一下,grunt这个工具的目的其实就是让我们方便地使用各种插件来帮助我们进行开发,而它的工作机制其实就是:首先我们用node安装好了基本的环境后,需要用什么插件就node install 插件名称,然后在Gruntfile.js中配置这个插件task的options和target就行了,最后按需执行插件!

</br>

这篇其实算不上一个grunt的完整Demo,比如路径配置,files,特殊插件配置和更灵活的用法都没介绍,我也没打算做这样一个教程,因为也已经有不少优秀的grunt教程了,grunt中文网也有。不过单看教程并不能让我们更好地使用grunt,后面需要用到的其他插件需要去官网看看插件的基本配置和介绍,一些其他用法也都是需要去官网或者其它大牛博客看看的,我现在只是从理解grunt本身这方面来做的一个浅显的介绍,希望能帮助到部分同学,共勉!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • Grunt入门(一) 什么是grunt Grunt就和photoshop里面的插件一样,它能够帮我们自动完成一些反...
    wheato阅读 2,221评论 0 9
  • 快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器。Gru...
  • Grunt是一个JavaScript任务运行器 Grunt基于Node.js,用JS 开发,这样就可以借助Node...
    李霖弢阅读 506评论 0 0
  • 对网站资源进行优化,并使用不同浏览器测试并不是网站设计过程中最有意思的部分,但是这个过程中的很多重复的任务能够使用...
    懵逼js阅读 1,053评论 0 8
  • 我家住在黄土高坡…… 这首震撼我心灵的歌谣早已奏响五湖四海 那年我走出了黄土高坡 我只在心中烙下了您的模样 屹立在...
    星辉岁月阅读 370评论 0 1