之前也介绍过前端构建工具 Ant 和 Yeoman,其中 Yeoman 工具就包含了 Grunt 所以就不多说。那么与 Ant 相比 Grunt 有这么几个优点:

  1. Javascript 语法,相比 Ant 的 XML 写起来更简洁更顺手;
  2. 任务模块资源丰富,如代码合并、压缩、检测、JSDoc、单元测试等你能想到的都可以找到;
  3. 文档丰富,从入门使用,到高级定制,都有相应的使用说明;
  4. 上手容易,Grunt 以及 Grunt 的任务模块都是通过 npm 进行安装和管理,配置简单。

一、安装 Grunt CLI

grunt-cli 类似一个 grunt 的管理器,可以管理本地环境中的多个 grunt

npm install -g grunt-cli

二、配置本地 Grunt

进入目标文件夹执行:

npm install grunt --save-dev

三、安装任务模块

执行 Grunt 任务时会用到各种任务模块,如果本地没有需要手动下载,例如 uglify 模块:

npm install grunt-contrib-uglify -save-dev

执行后 npm 就会将 uglify 下载到在当前目录。

四、建立一个 Grunt 项目

在 Grunt 项目中我们只用管理两个文件: Gruntfile.js 和 package.js(注意大小写)

先来看下 package.js,它是一个配置文件,可以定义一些常量供任务调用,另外当任务模块较多时手动安装就比较麻烦,这时也可以通过配置 package.js 来统一安装,下面是一个 package.js 的例子,你也可以通过 npm install 命令来生成一个 package.js 文件:

{

"name": "grunt-test",

"version": "0.1.0",

"devDependencies": {

"grunt": "~0.4.1",

"grunt-cmd-concat": "~0.2.0",

"grunt-contrib-concat": "~0.3.0",

"grunt-contrib-uglify": "~0.2.2",

"grunt-contrib-clean": "~0.4.0"

}

}

项目所在目录,键入如下命令,npm 会根据 package.js 文件中 devDependencies 的配置,将 grunt 及所需的模块下载到当前目录中。

npm install grunt --save-dev

再来看下 Gruntfile.js ,它可以说是 Grunt 的核心,建立哪些任务,如何执行都是由 Gruntfile.js 来定义:

module.exports = function(grunt) {

grunt.initConfig({

pkg: grunt.file.readJSON('package.json');

});

};

上面是 Gruntfile.js 的通用写法,可以看到它读取了我们之前定义的 package.js,那么在任务里就可以通过pkg.name的形式读取键值。

接下来看一个完整的 uglify 任务例子:

module.exports = function(grunt) {

grunt.initConfig({

pkg: grunt.file.readJSON('package.json'),

uglify: {

build: {

src: 'src/test.js',         // 原代码

dest: 'build/test-min.js'   // 压缩后的代码

}

}

});

// 引入任务模块

grunt.loadNpmTasks('grunt-contrib-uglify');

// 定义任务

grunt.registerTask('test', ['uglify']);

};

例子很简单也有注释就不多解释,最后键入grunt test就会执行 uglify 的压缩任务。

当然在实际工作中我们会需要执行多个任务,例如合并代码,添加一个任务也非常简单:

module.exports = function(grunt) {

grunt.initConfig({

pkg: grunt.file.readJSON('package.json'),

uglify: {

build: {

src: 'src/test.js',

dest: 'build/test-min.js'

}

},

concat:{    // 合并任务

src: ['src/test.js','scr/test2.js'],

dest: 'build/test-all.js'

}

});

// 引入任务模块

grunt.loadNpmTasks('grunt-contrib-uglify');

grunt.loadNpmTasks('grunt-contrib-concat');    // 添加合并任务所需模块

// 定义任务

grunt.registerTask('test', ['uglify'],['concat']);    // 添加合并任务

};

依然是执行grunt test命令就 OK 了。

到这里 Grunt 的基本配置和使用就介绍完了,后面还会整理介绍一些进阶的使用技巧。

前端构建工具 Grunt 入门的更多相关文章

  1. (转)前端构建工具gulp入门教程

    前端构建工具gulp入门教程 老婆婆 1.8k 2013年12月30日 发布 推荐 10 推荐 收藏 83 收藏,20k 浏览 本文假设你之前没有用过任何任务脚本(task runner)和命令行工具 ...

  2. 前端构建工具gulp入门教程(share)

    参考自:http://segmentfault.com/a/1190000000372547 资源: npm上得gulp组件 gulp的Github主页 官方package.json文档 gulp中文 ...

  3. 前端构建工具gulp入门

    本文假设你之前没有用过任何任务脚本(task runner)和命令行工具,一步步教你上手Gulp.不要怕,它其实很简单,我会分为五步向你介绍gulp并帮助你完成一些惊人的事情.那就直接开始吧. 第一步 ...

  4. 前端构建工具grunt

    简单配置grunt 配置gulp还是grunt都是在node的环境下安装的,所以在这之前保证你的node环境已经安装好了! -------------------------------------- ...

  5. 前端构建工具gulp入门教程

    本文假设你之前没有用过任何任务脚本(task runner)和命令行工具,一步步教你上手Gulp.不要怕,它其实很简单,我会分为五步向你介绍gulp并帮助你完成一些惊人的事情.那就直接开始吧. 第一步 ...

  6. 前端项目构建工具---Grunt

    什么是Grunt? grunt是javascript项目构建工具,在grunt流行之前,前端项目的构建打包大多数使用ant.(ant具体使用 可以google),但ant对于前端而言,存在不友好,执行 ...

  7. Gulp.js----比Grunt更易用的前端构建工具

    Gulp.js----比Grunt更易用的前端构建工具 Grunt一直是前端构建工具,然而他也不是毫无缺陷的,gulp的作者 Eric Schoffstall 在他介绍 gulp.js 的 prese ...

  8. 前端构建工具之gulp的安装和配置

    在选择构建工具时,看到更多人推荐gulp,从此入了gulp的坑- 一.安装node环境 百度谷歌一下就有了,在终端中分别输入 node -v 和 npm -v,若显示node和npm的版本号则说明no ...

  9. 前端开发自动化工作流工具,JavaScript自动化构建工具grunt、gulp、webpack介绍

    前端开发自动化工作流工具,JavaScript自动化构建工具grunt.gulp.webpack介绍 前端自动化,这样的一个名词听起来非常的有吸引力,向往力.当今时代,前端工程师需要维护的代码变得及为 ...

随机推荐

  1. iptables,lokkit,ebtables,arptables---logrotate

    iptables,lokkit,ebtables,arptables logrotate  这五个位置也被称为五个钩子函数(hook functions),也叫五个规则链. 1.PREROUTING ...

  2. python设置redis过期时间

    import time import redis if __name__ == "__main__": try: conn=redis.StrictRedis(host='192. ...

  3. python基础之协程函数、列表表达式、生成器表达式

    一.协程函数 协程函数的定义?如果在一个函数内部yield的使用方式是表达式形式的话,如x=yield,那么该函数称为协程函数 协程函数补充: def init(func): def wrapper( ...

  4. 三种空格unicode(\u00A0,\u0020,\u3000)表示的区别

    1.不间断空格\u00A0,主要用在office中,让一个单词在结尾处不会换行显示,快捷键ctrl+shift+space ; 2.半角空格(英文符号)\u0020,代码中常用的; 3.全角空格(中文 ...

  5. git-【七】bug分支

    在开发中,会经常碰到bug问题,那么有了bug就需要修复,在Git中,分支是很强大的,每个bug都可以通过一个临时分支来修复,修复完成后,合并分支,然后将临时的分支删除掉. 比如我在开发中接到一个40 ...

  6. Java Thread 如何处理未捕获的异常?

    Java Thread是不允许异常抛出到本线程之外的,Runnable接口的public abstract void run()是不允许throws Exception的,这在编译时就通不过. 线程异 ...

  7. PAT 1075 PAT Judge[比较]

    1075 PAT Judge (25 分) The ranklist of PAT is generated from the status list, which shows the scores ...

  8. Mybatis入门和简单Demo

    一.Mybatis的诞生 回顾下传统的数据库开发,JDBC和Hibernate是使用最普遍的技术,但这两种ORM框架都存在一定的局限性: JDBC:最原生的技术,简单易学,执行速度快,效率高,适合大数 ...

  9. Windows Server 2008 R2(X64) MSDN镜像简体中文版与英文版ISO下载及Key激活码

    Windows Server 2008 R2 MSDN ISO镜像简体中文版 文件名:cn_windows_server_2008_r2_standard_enterprise_datacenter_ ...

  10. 制造抽象基类--《C++必知必会》 条款33

    抽象类,含有纯虚函数的类,不可以创建对象. 然而,有时我们并不需要某个函数定义为纯虚函数,但是任然希望此类像抽象类一样,不可以创建对象. 方法1:通过确保类中不存在共有构造函数来模拟抽象基类的性质.意 ...