Grunt使用入门
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使用入门的更多相关文章
- grunt快速入门
快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...
- 前端自动化grunt轻松入门
如果你还不了解grunt,或者只是听过它的名字而没有去研究过它,那么这篇入门级的文章就是为你写的,相信看完你就会爱上grunt! grunt是什么? grunt是一个非常好的自动化工具,你只管code ...
- Grunt新手入门篇
今天看到一篇通俗易懂的Grunt入门文章,博主写得很用心,原文请戳:http://yujiangshui.com/grunt-basic-tutorial/ 当时学习 Grunt 的时候,真是很头疼. ...
- 前端打包构建工具grunt快速入门(大篇幅完整版)
打包的目的和意义就不用叙述了直接上干货 http://www.gruntjs.net/getting-started里面的教程也太简单了,需要下一番功夫去研究才行.本文将grunt打包的常用方法都用实 ...
- grunt使用入门(zz)
下面介绍grunt的基本使用方法,把前端项目中的对个js文件,合并到一起,并压缩. 注意,例子用的是grunt 0.4.5版本,低版本可能在配置上有所不同. 工具/原料 node 方法/步骤 首先用n ...
- grunt 快速入门
Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本号的 No ...
- grunt之入门实践
grunt 是基于nodejs的前端项目管理工具,凭借着大量优秀的插件从众多前端项目管理工具中脱颖而出. 确保先安装了nodejs 为了方便使用Grunt,应该在全局范围内安装Grunt的命令行接口( ...
- grunt轻松入门
项目目录,js源文件 gruntest Gruntfile.js package.json -- js ext community_plugin.js glogin_frm_cover.js iLog ...
- 应用Grunt自动化地优化你的项目前端
在不久前我曾写了一篇 应用r.js来优化你的前端 的文章,为大家介绍了r.js这个实用工具,它可以很好地压缩.合并前端文件并打包整个项目.但是如果将r.js放到项目中,我们不得不顾及到一个问题——项目 ...
随机推荐
- C++在设计和使用智能指针
为一个C++用户的.使用指针可以算的上是常态,但在使用过程中.多的时间,可能是由于new要么malloc对象,上次忘记的释放结束(我会犯这样一个错误).内存泄露. 而此时智能指针可能能够帮助我去解决问 ...
- SendRedirect和forward差分
(1)重定向JSP实现JSP/Servlet跳转到目标资源的方法中,基本的想法是:server目标资源完成URL通过HTTP 在回答本报发client浏览器.收到的浏览器URL更新到地址栏后,而目标资 ...
- POJ 1743 Musical Theme Hash+二分法
标题效果:有一个美丽的旋律,它们是由一些不大于88音调.如果计为五个音调的量度,问:是否有相同的节奏的多个部分(相同的差,以及两者之间的相同的节奏不能重叠),并寻求最长长度. 思考:这个问题是八人中的 ...
- AngularJS html5Mode与ASP.NET MVC路由共存
前言 很久之前便听说AngularJS,非常酷,最近也比较火,我也在持续关注这个技术,只是没有认真投入学习.前不久公司找我们部门做一个OA系统(想省下几万大洋的费用),第一时间便想到AngularJS ...
- Struts1和Struts2对照
最近学习Struts1和Struts2.好多人.提到非常多的信息. Struts2不从Struts1进化. Struts2的前身WebWork. 呢,看了一些资料,下边就来比較比較. 一.架构分析 S ...
- sql小总结2
SQL NULL 值 如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录.这意味着该字段将以 NULL 值保存. NULL 值的处理方式与其他值不同. NULL ...
- 背包问题 (DP)
利用记忆化数组.记dp[i][j]为根据rec的定义,从第i个物品开始挑选总重小于j时,总价值的最大值. 递推式: dp[i][j]=0 (j<w[i]) dp[i][j] dp[i][ ...
- sicily 1007 To and Fro (基地称号)
链接:http://soj.me/show_problem.php?pid=1007 Description Mo and Larry have devised a way of encrypting ...
- python3使用smtplib发电子邮件
smtplib模块smtp简单邮件传输协议client实现.对于多功能性,有时,当你要发送带附件的邮件或图片,使用email.mime加载内容. 码,如以下: import smtplib impor ...
- E: 无法获取锁 /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)解决方法
/********************************************************************* * Author : Samson * Date ...