Grunt使用入门 (by vczero)

一、前言

项目中一直在使用Grunt,只是对Grunt的基本使用,却未系统的总结过。为什么要构建工具?一句话:自动化。对于需要反复重复的任务,例如压缩(minification)、编译、单元测试、linting等,自动化工具可以减轻你的劳动,简化你的工作。当你正确配置好了任务,任务运行器就会自动帮你或你的小组完成大部分无聊的工作。为什么要使用Grunt。Grunt生态系统非常庞大,并且一直在增长。由于拥有数量庞大的插件可供选择,因此,你可以利用Grunt自动完成任何事,并且花费最少的代价。如果找不到你所需要的插件,那就自己动手创造一个Grunt插件,然后将其发布到npm上吧。——引自gruntjs官网。来,看看多“牛”的logo:

这logo牛吧,我真心觉得真牛。

二、安装Grunt & 插件

(1)首先,需要安装了Node.js,可以访问:node.js安装。

(2)npm install -g grunt-cli :这样,grunt命令就被追加到了系统的环境path中了。grunt-cli的作用是调度不同版本的Grunt。grunt-cli在每次grunt运行的时候,都是通过node.js的模块的require查找系统的grunt。

(3)创建package.json、Gruntfile.js/coffee

对于package.json,做过node.js开发的都熟悉,用于发布和管理依赖。这里,我们可以把grunt的配置放到devDependencies中。

Gruntfile.js或者Gruntfile.coffee是用来配置Grunt的task的。

这里,手动建一个项目find,手动创建package.json和Gruntfile.js。当然,可以使用npm init命令初始化package.json文件,如下图所示:

package.json配置:

{
"name": "山鬼谣-find-grunt",
"version": "0.1.0",
"devDependencies": {
"grunt": "~0.4.1",
"grunt-contrib-jshint": "~0.6.0",
"grunt-contrib-nodeunit": "~0.2.0",
"grunt-contrib-uglify": "~0.2.2"
}
}

因为,已经在package.json中填写了相关配置,因此可以使用npm安装。刚才使用中文name报错了,改成了英文OK("name": "shanguiyao-find-grunt",)。将grunt安装到开发环境中。

(4)安装Grunt

npm install grunt --save-dev

如下图,grunt安装成功,并且更新了package.json中grunt的版本,现在为4.5:

(5)安装grunt插件

其实,可以使用上面同样的方式安装package.json的grunt插件。因为已经有了package.json描述,所以npm install就一并安装了。安装完成后,项目的node-module下情况如下:

三、使用Gruntfile.js

Gruntfile应当和package同样存放于项目的根目录。Gruntfile主要是项目和任务的配置,包括自定义任务。

//整个任务必须导出module.exports
module.exports = function(grunt) {
//grunt配置
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
//uglify插件的使用,用于将js压缩为一个目标文件
uglify: {
options: {
banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
},
build: {
src: 'src/<%= pkg.name %>.js',
dest: 'build/<%= pkg.name %>.min.js'
}
}
}); // 加载插件。
grunt.loadNpmTasks('grunt-contrib-uglify'); // 默认任务列表
grunt.registerTask('default', ['uglify']);
};

四、使用grunt

首先,建立目录src和shanguiyao-find-grunt.js。

var O = (function(){
var MyObject = {
"name": "山鬼谣",
"url": "http://www.cnblogs.com/vczero/",
getName: function(){},
showLove: function(){console.log('javascript世界');}
}; MyObject.test = function(){}; return MyObject;
})(); O.showLove();

整个项目如下:

使用grunt命令:

OK,我们可以看到压缩后的效果了。

五、后期的blog

(1)grunt-cli源码研读

(2)大型项目的grunt配置举例

 

Grunt使用入门的更多相关文章

  1. grunt快速入门

    快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...

  2. 前端自动化grunt轻松入门

    如果你还不了解grunt,或者只是听过它的名字而没有去研究过它,那么这篇入门级的文章就是为你写的,相信看完你就会爱上grunt! grunt是什么? grunt是一个非常好的自动化工具,你只管code ...

  3. Grunt新手入门篇

    今天看到一篇通俗易懂的Grunt入门文章,博主写得很用心,原文请戳:http://yujiangshui.com/grunt-basic-tutorial/ 当时学习 Grunt 的时候,真是很头疼. ...

  4. 前端打包构建工具grunt快速入门(大篇幅完整版)

    打包的目的和意义就不用叙述了直接上干货 http://www.gruntjs.net/getting-started里面的教程也太简单了,需要下一番功夫去研究才行.本文将grunt打包的常用方法都用实 ...

  5. grunt使用入门(zz)

    下面介绍grunt的基本使用方法,把前端项目中的对个js文件,合并到一起,并压缩. 注意,例子用的是grunt 0.4.5版本,低版本可能在配置上有所不同. 工具/原料 node 方法/步骤 首先用n ...

  6. grunt 快速入门

    Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本号的 No ...

  7. grunt之入门实践

    grunt 是基于nodejs的前端项目管理工具,凭借着大量优秀的插件从众多前端项目管理工具中脱颖而出. 确保先安装了nodejs 为了方便使用Grunt,应该在全局范围内安装Grunt的命令行接口( ...

  8. grunt轻松入门

    项目目录,js源文件 gruntest Gruntfile.js package.json -- js ext community_plugin.js glogin_frm_cover.js iLog ...

  9. 应用Grunt自动化地优化你的项目前端

    在不久前我曾写了一篇 应用r.js来优化你的前端 的文章,为大家介绍了r.js这个实用工具,它可以很好地压缩.合并前端文件并打包整个项目.但是如果将r.js放到项目中,我们不得不顾及到一个问题——项目 ...

随机推荐

  1. 编写高质量JavaScript代码绳之以法(The Essentials of Writing High Quality JavaScript)翻译

    原文:The Essentials of Writing High Quality JavaScript 才华横溢的Stoyan Stefanov,在他写的由O'Reilly初版的新书<Java ...

  2. java它 ------ 图形界面(两)

    <img src="http://img.blog.csdn.net/20150604093446275?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi ...

  3. Mac下Jekyll安装

    之前一直用Wordpress,虽然功能强大,各种插件各种bug,如果想弄个主题,折腾得要命.最近改用jekyll+gitHub免费空间.记录一下. 我用的是Mac,所以只讲述Mac下如何安装,Wind ...

  4. poj3903 Stock Exchange(最长上升子序列)

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:id=3903">http://poj.org/problem?id=3903 Descrip ...

  5. HDU1069_Monkey and Banana【LCS】

    Monkey and Banana Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  6. 解决Activity启动黑屏和设置android:windowIsTranslucent不兼容activity切换动画的问题

    在该项目中遇到开Activity之后,黑屏问题,解决的办法是在网上通过设置发现theme和style特性,可以实现. http://www.cnblogs.com/sunzn/p/3407078.ht ...

  7. JAVA web四个属性的范围汇总

    首先,你需要知道client跳跃和server差别: client跳转: response.sendRedict(String path),地址栏发生改变. 不能传递request属性. server ...

  8. OC省字典的数组摘要集

    开放式党员 NSString *filePath = @"/Users/dlios/Downloads/area.txt"; 推断错误值 打印出来 NSError *error = ...

  9. Android Context MODE的四种模式解析(转)

    Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中.可以使用Context ...

  10. hdu4419 Colourful Rectangle 12年杭州网络赛 扫描线+线段树

    题意:给定n个矩形,每个矩形有一种颜色,RGB中的一种.相交的部分可能为RG,RB,GB,RGB,问这n个矩形覆盖的面积中,7种颜色的面积分别为多少 思路:把x轴离散化做扫描线,线段树维护一个扫描区间 ...